簡體   English   中英

斷言單元測試

[英]Either/or assertions unittest

在單元測試中,我想要執行以下操作:

result = myFunction()
self.assertFalse(result) OR self.assertRaises(Exception, myFunction)

其想法是,如果myFunction的實現更改為返回false而不是引發異常(反之亦然),則測試仍將正確運行(即指示非肯定結果)。

這樣的事情可能嗎?

您可以檢查myFunction()引發特定異常:

try:
    self.assertFalse(myFunction())
except SpecificException:
    pass

在這種情況下,如果myFunction()引發SpecificException ,它將被靜默忽略。

換句話說,您會在兩種情況下看到測試失敗: myFunction()引發了您不等待的異常,或者myFunction()調用的結果未評估為False


如果您的函數可以引發任何異常,則可以檢查是否在except塊中捕獲到AssertionError並重新引發它,而忽略其他異常:

try:
    self.assertFalse(myFunction())
except AssertionError:
    raise
except:
    pass

請注意,這對我來說似乎不是很直觀和清晰。 在理想的世界中,您將需要分別處理這兩種情況:創建一個使myFunction()結果變為False的測試,另一個使它引發異常的測試。

您可以,但是那會使您的測試變弱。 使用myFunction的所有其他單元測試將不得不承擔它或者可能引發異常或返回False -或者測試可能會破壞時的行為變化。

使您的所有其他測試適應這種不確定性將使所有這些代碼更難編寫。 出於什么目的? 好處是可疑的。

相反,進行使用assertRaises的確定測試。 如果實現更改,則讓測試失敗,然后將測試更改為assertFalse 這種變化也可能導致其他測試失敗, 這是一件好事 它將迫使您檢查myFunction用例以及更改行為的后果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM