我正在为几个python程序编写测试用例。我使用了自定义记录器功能。
logger.info("Some text")
logger.error("some text")
现在记录器是从其他程序创建的对象。我有一个名为“ logger_1.py”的程序,并且正在我的当前程序中导入该程序以创建一个记录器对象。
from logger_1 import getlogger
global logger
logger = getlogger("addaccess", "_log)
在单元测试用例中,我得到的记录器未定义。
如何跳过经过单元测试的功能中以logger开头的语句,或者我可以在程序功能中模拟或修补所有logger语句的任何其他方式?
答案 0 :(得分:0)
我看到三个选项:
请勿更改任何内容。让记录器记录日志并忽略其产生的任何输出。无论如何,开发/测试/登台环境都应该记录到非生产系统中,因此应该不加考虑就丢弃输出。为了完整起见,我主要包含此选项,但是对于小型或不重要的系统,这是一个有效的解决方案。在您的情况下,由于logger_1.py
在测试过程中似乎不可用,因此这也不起作用。
更改创建记录器的代码,或在这种情况下,将其从另一个位置导入,以便它使用不同的,特定于测试的记录器和输出位置。但是,捕获该执行环境(命令行,导入等)可能会有些棘手。例如,在我们的系统中,通常会包含一个
if __name__ == "__main__":
#do something with logger
阻止,以便与从导入到测试套件相比,如果从命令行调用文件,记录器将指向其他位置。
您可以使用虚拟记录器来模拟每种测试方法的记录器:
from unittest import mock, TestCase
create_dummy_logger():
#create and return a dummy logger
pass
SomethingTests(TestCase):
@mock.patch("getlogger", create_dummy_logger)
test_method_that_logs_something(self):
pass