【问题标题】:Python UnittestPython 单元测试
【发布时间】:2019-11-20 05:51:05
【问题描述】:

我有需要支持的情况:

我有一个作为 logger_1.py 的程序,它返回一个记录器类

我有我的其他程序作为 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")

现在我要写一个单元测试用例

import unittest
from data_extract import initl

class data_extract(unittest.TestCase)

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

现在在运行测试用例时,我得到的记录器没有定义。

请指导我如何从我的单元测试用例中模拟/修补或忽略记录器。

【问题讨论】:

    标签: python unit-testing


    【解决方案1】:

    在测试环境中,Main() 方法可能从未被调用,因此initl 方法中的变量logger 未定义。模拟变量比模拟函数要复杂一些,所以首先我要更改 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")
    

    然后你可以模拟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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-03
      • 2015-03-05
      • 1970-01-01
      • 2013-09-27
      • 2011-12-05
      • 2019-05-11
      • 2015-11-30
      • 2015-09-06
      相关资源
      最近更新 更多