忽略 python 单元测试用例中的记录器功能
Ignore logger function in python unit test case
我正在为几个 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 语句?
我看到了三个选项:
不要改变任何东西。让记录器记录并忽略它产生的任何输出。 Development/Testing/Staging 环境无论如何都应该记录到非生产系统,因此输出应该能够不加思索地丢弃。为了完整起见,我主要包括这个选项,但对于小型或不重要的系统,这是一个有效的解决方案。在您的情况下,这也不起作用,因为 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
我正在为几个 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 语句?
我看到了三个选项:
不要改变任何东西。让记录器记录并忽略它产生的任何输出。 Development/Testing/Staging 环境无论如何都应该记录到非生产系统,因此输出应该能够不加思索地丢弃。为了完整起见,我主要包括这个选项,但对于小型或不重要的系统,这是一个有效的解决方案。在您的情况下,这也不起作用,因为
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