具有自定义异常的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
.
我在 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
.