小编Mic*_*elM的帖子

如何使用日志记录,pytest fixture和capsys?

我正在尝试对使用日志库的一些算法进行单元测试.

我有一个创建记录器的夹具.

在我的第一个测试用例中,我不使用此fixture并使用print来登录stdout.这个测试用例通过.

在我的第二个测试用例中,我使用了这个fixture,但没有在pytest doc中记录.我只是在测试中调用相关函数来获取记录器.然后我使用记录器登录到stdout.这个测试用例通过.

在我的第3个测试用例中,我使用了pytest doc中记录的这个fixture.夹具作为参数传递给测试函数.然后我使用记录器登录到stdout.这个测试用例失败了!它在stdout中找不到任何东西.但是在错误消息中,它表示我的日志位于捕获的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 …
Run Code Online (Sandbox Code Playgroud)

python logging unit-testing pytest

8
推荐指数
3
解决办法
5466
查看次数

标签 统计

logging ×1

pytest ×1

python ×1

unit-testing ×1