簡體   English   中英

在sqlalchemy代碼的單元測試中使用assertRaises時,無法理解結果

[英]Cant understand results while using assertRaises in unit testing on a sqlalchemy code

我正在嘗試對sqlalchemy代碼進行單元測試。

    def add_user(*user_details):
         try:
             u = User(*user_details)
             session.add(u)
             session.commit()
         except:
             session.rollback()

現在在我的單元測試中:

    def testDuplicate(self):
         add_user(user_detail1,user_detail2)
         self.assertRaises(IntegrityError, add_user(user_detail1,user_detail2))

如果add_user函數調用引發Integrity錯誤,則此測試應該成功,如果沒有異常則失敗。 但是問題是兩種情況下測試都成功。

為什么會這樣? 我的代碼中有什么問題嗎? 還是assertRaises的工作方式與我期望的有所不同?

Atfirst我認為這種情況正在發生,因為我已將put除了在我的try子句中,並且異常僅在那里處理並且assertRaises不會得到異常。 但是,如果真是這樣,那么assertRaises應該在沒有收到異常的情況下失敗。

如果在編寫單元測試時出現問題,請告訴我,因為我仍在學習將單元測試納入編碼習慣。

您使用的assertRaises錯誤,而是應該這樣寫:

self.assertRaises(IntegrityError, add_user, user_detail1, user_detail2)

您將函數和參數分別提供給assertRaises以便它可以控制何時調用函數(例如,在assertRaises中的try/except塊中)。

另一個問題是被測函數吞沒了錯誤。 嘗試

def add_user(*user_details):
         try:
             u = User(*user_details)
             session.add(u)
             session.commit()
         except:
             session.rollback()
             raise

這將重新引發異常(但允許回滾事務)。

暫無
暫無

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

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