由於具有多個輸出流,因此執行具有多個獨立故障模式的單個測試時出現了這個問題。我還想顯示在所有這些模式下聲明數據的結果,而不管哪一個首先失敗。除了使用套件來表示單個測試之外,Python的unittest沒有這樣的功能,這是不可接受的,因爲我的單個測試總是需要作爲一個單元運行;它只是沒有捕捉到事物的本質。如何在單個Python單元測試中處理多個斷言?
一個實際的例子是測試一個也會生成日誌的對象。你想斷言它的方法的輸出,但你也想斷言日誌輸出。這兩個輸出需要不同的測試,可以整齊地表示爲兩個股票斷言表達式,但是您也不希望一個人在測試中隱藏另一個可能的失敗。所以你真的需要同時測試兩者。
我拼湊了這個有用的小部件來解決我的問題。
def logFailures(fnList):
failurelog = []
for fn in fnList:
try:
fn()
except AssertionError as e:
failurelog.append("\nFailure %d: %s" % (len(failurelog)+1,str(e)))
if len(failurelog) != 0:
raise AssertionError(
"%d failures within test.\n %s" % (len(failurelog),"\n".join(failurelog))
)
這是使用像這樣:
def test__myTest():
# do some work here
logFailures([
lambda: assert_(False,"This test failed."),
lambda: assert_(False,"This test also failed."),
])
結果是logFailures()將引發一個包含日誌列表中的方法中提出的所有斷言的一個例外。
問題:雖然這樣做,我仍然想知道是否有更好的方法來處理這個問題,除了需要去創建嵌套測試等等的長度?
「您也不希望某人在測試中隱藏另一方的可能失敗」。如果你想測試兩種不同的東西,請做兩個不同的測試! – 2012-03-22 19:43:51
「你也不希望一個人在測試中隱藏另一個人的可能失敗」。是的 - 我想要:這些都是單元測試。如果一個測試失敗,請更正失敗並重新運行測試。 – 2012-03-22 20:52:20