具有自定义异常的pytest capsys

pytest capsys with custom exception

我在 pytest 中测试自定义异常的输出时遇到问题。

import pytest


class CustomException(Exception):
    def __init__(self, extra_message: str):
        self.message = extra_message
        super().__init__(self.message)
        # Should not need to print this as Exception already does this 
        # print(self.message)


def test_should_get_capsys_output(capsys):
    with pytest.raises(CustomException):
        raise CustomException("This should be here.")

    out, err = capsys.readouterr()
    
    # This should not be true 
    assert out == ''
    assert err == ''
    assert 'This' not in out

这个例子应该不会通过,因为我应该能够断言输出中出现了一些东西。如果我 print(self.message) 我最终在实际使用时打印了两次消息,但只有这样 capsys 才会收集标准输出。

我也尝试过 caplog 和 capfd 的变体,但都无济于事。 [This SO solution] 建议将输出添加到 with pytest.raises(...) as info 并测试 info 但我希望 capsys 也能正常工作。

感谢您的宝贵时间。

我对你的问题有点困惑?

A python 异常将停止执行当前测试,即使在 pytest 中也是如此。因此,通过在上下文管理器(with 语句)中引发异常,我们 simulating/catching 它 before 它得到一个有机会停止我们当前的测试并转到 stderr.