简体   繁体   English

Python 单元测试

[英]Python Unittest

I have a situation where I need support:我有需要支持的情况:

I have a program as logger_1.py which returns a logger class我有一个作为 logger_1.py 的程序,它返回一个记录器 class

I have my other program as data_extract.py where I have imported logger_1.py script我有我的其他程序作为 data_extract.py 我在其中导入了 logger_1.py 脚本


from logger_1.py import getHLogger

def initl(abc):

    logger.info("Initialise starts")
    newdata = abc + "sometext"
    return newdata

def Main():

      global logger
      logger = getHLogger("dd_12")
      logger.info("Started")

      retu = initl("Hello")

Now I have to write a unit test case现在我要写一个单元测试用例

import unittest
from data_extract import initl

class data_extract(unittest.TestCase)

      def test_initl(self):
          self.assertEqual(initl("Special"), "Special sometext")

Now when running the test case I am getting logger is not defined.现在在运行测试用例时,我得到的记录器没有定义。

Please guide how can I mock/patch or ignore logger from my unit test case.请指导我如何从我的单元测试用例中模拟/修补或忽略记录器。

In the testing environment the method Main() is, presumably, never called so the variable logger in method initl is undefined.在测试环境中,可能从未调用过Main()方法,因此方法initl中的变量logger未定义。 Mocking variables is a bit more tricky than mocking functions, so first I'd change initl such that the variable logger is always defined and the behaviour can be changed by mocking getHLogger : Mocking 变量比 mocking 函数要复杂一些,所以首先我要更改initl以便始终定义变量logger并且可以通过getHLogger更改行为:

from logger_1.py import getHLogger

global logger
logger = getHLogger("dd_12")

def initl(abc):
    logger.info("Initialise starts")
    newdata = abc + "sometext"
    return newdata

def Main():
      logger.info("Started")
      retu = initl("Hello")

Then you can mock getHLogger :然后你可以模拟getHLogger

import unittest
from data_extract import initl

class MockLogger()
    def info(msg):
        pass

def mock_get_logger(some_param):
    return MockLogger()

class data_extract(unittest.TestCase)

      @unittest.mock.patch("getHLogger", mock_get_logger)
      def test_initl(self):
          self.assertEqual(initl("Special"), "Special sometext")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM