我想知道是否有更好的方法以及raise X from Y使用 pytest進行測驗的選項。
這是一個虛擬示例:
import pytest
class AException(Exception):
pass
class A:
def __init__(self) -> None:
raise AException("Class A")
class C:
def __init__(self) -> None:
try:
A()
except AException as err:
raise ValueError("C Failed") from err
def test_class_c():
with pytest.raises(ValueError):
C()
在這個例子中,測驗應該確認它ValueError是AException從Class A.
顯而易見的解決方案是像這樣傳遞訊息:
except AException as err:
raise ValueError(f"C Failed: {err}") from err
然后匹配它:
def test_class_c():
with pytest.raises(ValueError, match="Class A"):
C()
但還有另一種方法嗎?
uj5u.com熱心網友回復:
我還沒有遇到過這樣做的官方方法,但一種方法可能是檢查__cause__(或__context__)最近的“最近”例外:
def test_class_c():
with pytest.raises(ValueError) as exc_info:
C()
assert isinstance(exc_info.value.__cause__, AException)
assert exc_info.value.__cause__.args == ("Class A",)
PEP 關于__cause__和__context__:https : //www.python.org/dev/peps/pep-3134/
__cause__ 和 __context__ 有什么區別?
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/341425.html
