【发布时间】:2016-07-26 15:38:21
【问题描述】:
我正在尝试对一些使用日志库的算法进行单元测试。
我有一个可以创建记录器的装置。
在我的第一个测试用例中,我不使用此夹具,而是使用打印记录到标准输出。此测试用例通过。
在我的第二个测试用例中,我使用了这个夹具,但不是 pytest 文档中记录的那样。我只是在我的测试中调用相关函数来获取记录器。然后我使用记录器记录到标准输出。此测试用例通过。
在我的第三个测试用例中,我使用了 pytest 文档中记录的这个夹具。夹具作为参数传递给测试函数。然后我使用记录器记录到标准输出。这个测试用例失败!它在标准输出中找不到任何内容。但是在错误消息中,它说我的日志在捕获的 stdout 调用中。
我做错了什么?
import pytest
import logging
import sys
@pytest.fixture()
def logger():
logger = logging.getLogger('Some.Logger')
logger.setLevel(logging.INFO)
stdout = logging.StreamHandler(sys.stdout)
logger.addHandler(stdout)
return logger
def test_print(capsys):
print 'Bouyaka!'
stdout, stderr = capsys.readouterr()
assert 'Bouyaka!' in stdout
# passes
def test_logger_without_fixture(capsys):
logger().info('Bouyaka!')
stdout, stderr = capsys.readouterr()
assert 'Bouyaka!' in stdout
# passes
def test_logger_with_fixture(logger, capsys):
logger.info('Bouyaka!')
stdout, stderr = capsys.readouterr()
assert 'Bouyaka!' in stdout
# fails with this error:
# > assert 'Bouyaka!' in stdout
# E assert 'Bouyaka!' in ''
#
# tests/test_logging.py:21: AssertionError
# ---- Captured stdout call ----
# Bouyaka!
如果我顺便重新排序测试用例,没有任何变化。
【问题讨论】:
标签: python unit-testing logging pytest