假設我們有水木清華這樣的:如何使用pytest檢查誤差不提出
import py, pytest
ERROR1 = ' --- Error : value < 5! ---'
ERROR2 = ' --- Error : value > 10! ---'
class MyError(Exception):
def __init__(self, m):
self.m = m
def __str__(self):
return self.m
def foo(i):
if i < 5:
raise MyError(ERROR1)
elif i > 10:
raise MyError(ERROR2)
return i
# ---------------------- TESTS -------------------------
def test_foo1():
with pytest.raises(MyError) as e:
foo(3)
assert ERROR1 in str(e)
def test_foo2():
with pytest.raises(MyError) as e:
foo(11)
assert ERROR2 in str(e)
def test_foo3():
....
foo(7)
....
問:我怎樣才能讓test_foo3()來測試,沒有MyError提高? 很明顯,我可以只測試:
def test_foo3():
assert foo(7) == 7
,但我想測試通過pytest.raises()。有可能嗎? 例如:在情況下,「foo」函數沒有返回值可言,
def foo(i):
if i < 5:
raise MyError(ERROR1)
elif i > 10:
raise MyError(ERROR2)
它可能是有意義的測試這種方式,恕我直言。
它看起來像尋找一個問題,代碼測試'foo(7)'是好的。您將得到正確的信息,並且使用pytest的所有輸出將更容易進行調試。你從@Faruk(''Unexpected error ...''')強制提出的建議沒有提到有關錯誤的信息,你會堅持下去。你可以做的唯一事情就是說明你的意圖,比如'test_foo3_works_on_integers_within_range()'。 – dhill