我在做一个项目,每次运行时都会创建一个不同的日志文件。我有一些单元测试来测试我的代码,但是在这个过程中也会导致日志文件被创建。我的应用程序代码如下:
在模块.py在
import logging
from uuid import uuid4
class TestRun:
def __init__(self):
self.test_run_id = str(uuid4())
self.logger = logging.getLogger(__name__)
self.logger.setLevel(logging.INFO)
handler = logging.FileHandler('{}.log'.format(self.test_run_id))
self.logger.addHandler(handler)
def prep_test_run(self):
self.logger.info('Starting prep')
if __name__ == '__main__':
tr = TestRun()
tr.prep_test_run()
我的测试代码是这样的:
^{pr2}$每次我运行单元测试文件都会被创建。在运行单元测试时有没有一种方法可以禁用它。我试图在def setUp(self)
中设置日志级别,但没有成功。在
这应该可以做到:
logging.getLogger(__name__).disabled = True
在导入后添加这行。在
我看到了两种处理方法:要么删除处理程序,要么根本就不创建它。在
首先,从
test_function
中的记录器中删除处理程序:这是非常暴力的(它删除了所有的日志处理程序,因此请谨慎使用),但它应该可以解决问题。在
第二种方法是通过向
^{pr2}$TestRun.__init__
添加关键字参数来控制是否首先生成日志,类似于:然后,当您在测试中创建一个实例时,执行
tr = TestRun(file_logs = False)
。在另一方面,正如在评论中指出的,最好是按常规创建日志,然后在测试完成后删除它们。在
下面是一个context manager,它将为部分代码禁用特定的记录器:
然后您可以这样使用它:
^{pr2}$相关问题 更多 >
编程相关推荐