pytest測試用例編寫----預期的異常測試(Expecting Exceptions)


在pytest中測試預期的異常使用pytest.raises。
 
with pytest.raises(TypeError):
  tasks.add(task='not a Task object')
  上面這個語句的意思是:無論什么時候,當tasks.add(task='not a Task object')拋出TypeError時,測試通過;當tasks.add(task='not a Task object')沒有拋出異常,或者拋出的異常不是TypeError類的異常時,都是失敗的。
 
​with​ pytest.raises(ValueError) ​as​ excinfo:
​    tasks.start_tasks_db(​'some/great/path'​, ​'mysql'​)

  注:在包含pytest.raises()的with語句塊中,要拋出異常的語句一定是最后一個語句,如果不是,拋出異常語句后面的語句不會執行;上例中,在tasks.start_tasks_db(​'some/great/path'​, ​'mysql'​)后面如果有其他語句的話,都不會執行;(更多詳細信息使用help(pytest.raises)查看,使用前先import pytest)

  with pytest.raises(ValueError) :使用with語句進行上下文管理,調用pytest的raises方法可以得到一個ExceptionInfo類型的返回值,這個返回值包含了ValueError異常發生時的所有上下文信息,我們可以使用他們來判斷異常的發生是否符合預期。
exception_msg = excinfo.value.args[0]
    ​assert​ exception_msg == ​"db_type must be a 'tiny' or 'mongo'"

  注:ExceptionInfo類型繼承自Python的基本異常類Exception,它主要使用的3個屬性是:type,value和traceback;上例中就是讀取了value屬性中的args屬性(捕獲異常提供的參數列表)。python基礎異常類Exception的默認行為是接受所有傳遞的參數並將它們以元組形式存儲在 .args 屬性中。

  關於python使用基本異常類Exception的args屬性的補充說明;詳見URL:https://blog.csdn.net/Enjolras_fuu/article/details/83629064

 

 

以下實例說明了Exceptioninfo類型常用的三個屬性(value、type和traceback)的用法:

 

運行:pytest -s -k "raise" test_pytest_example.py

說明:

  type屬性:是指捕獲的異常是那種類型如:ValueError,TypeError等
  Value屬性:記錄了捕獲的異常返回的信息,它的args屬性是一個列表用於讀取異常信息
  traceback屬性:捕獲異常的運行跟蹤信息。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM