[英]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.