在我的Django文件中,我非常简单地通过以下方式创建了一些日志条目:
# myapp/view.py
import logging
logger = logging.getLogger(__name__)
...
# somewhere in a method
logger.warning("display some warning")
然后,假设我要测试是否记录了此警告。在测试套件中,我通常会这样做:
# myapp/test_view.py
...
# somewhere in a test class
def test_logger(self):
with self.assertLogs("myapp.view") as logger:
# call the view
self.assertListEqual(logger.output, [
"WARNING:myapp.view:display some warning"
])
这样,记录器的输出被静音,我可以对其进行测试。当我仅使用以下命令对此视图运行测试时,这种方法可以正常工作:
./manage.py test myapp.test_view
但是当我运行所有测试时却没有:
./manage.py test
我收到此错误的地方:
Traceback (most recent call last):
File "/home/neraste/myproject/myapp/test_view.py", line 34, in test_logger
# the call of the view
AssertionError: no logs of level INFO or higher triggered on myapp.view
那我该怎么办?我可以使用unittest.mock.patch
模拟对logger
的调用,但是我发现这种方式很难看,尤其是当您将参数传递给记录器时。而且,assertLogs
只是为此目的而设计的,所以我想知道哪里出了问题。
答案 0 :(得分:0)
问题就在我这边。在其他测试文件中,我明确关闭了日志记录(筛选到关键级别),这就是为什么在运行所有测试时都没有记录日志的原因。