![](/img/trans.png)
[英]Error while testing the raise of self-defined exceptions (using 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.