53
A
回答
85
是的。 sys.exit
提高SystemExit
,這樣你就可以assertRaises
檢查:
with self.assertRaises(SystemExit):
your_method()
的SystemExit
實例都被設置爲所提出的退出狀態屬性code
,並通過assertRaises
返回的上下文經理有陷入異常實例爲exception
,因此檢查退出狀態很簡單:
with self.assertRaises(SystemExit) as cm:
your_method()
self.assertEqual(cm.exception.code, 1)
從Python退出。這是通過提高
SystemExit
例外來實現的......可以在外層攔截退出嘗試。
5
下面是一個完整的工作示例。儘管帕維爾出色地回答了這個問題,但我花了一段時間才弄明白這一點,所以我在這裏包括它,希望這會有所幫助。
import unittest
from glf.logtype.grinder.mapping_reader import MapReader
INCOMPLETE_MAPPING_FILE="test/data/incomplete.http.mapping"
class TestMapReader(unittest.TestCase):
def test_get_tx_names_incomplete_mapping_file(self):
map_reader = MapReader()
with self.assertRaises(SystemExit) as cm:
tx_names = map_reader.get_tx_names(INCOMPLETE_MAPPING_FILE)
self.assertEqual(cm.exception.code, 1)
1
作爲附加的註釋帕維爾的出色答卷,你還可以檢查特定的狀態,如果他們在你正在測試的功能正在提供。例如,如果your_method()
包含以下sys.exit("Error")
將有可能以測試「錯誤」明確:
with self.assertRaises(SystemExit) as cm:
your_method()
self.assertEqual(cm.exception, "Error")
1
我找到了答案,你的問題在Python Unit Testing documentation搜索「測試的例外」。使用你的例子,單元測試看起來像下面這樣:
self.assertRaises(SystemExit, your_function, argument 1, argument 2)
記得包括測試你的函數所需的所有參數。
+0
謝謝你的完美 – sam 2016-06-23 15:53:13
相關問題
- 1. 是否可以斷言在VS2005單元測試中調用了一個方法?
- 2. 單元測試WCF調用,是否有可能以及如何?
- 3. Android,Espresso。是否有可能,並且從另一個測試方法調用一種測試方法是否好?
- 4. 如何檢測單元測試是否調用某個方法?
- 5. 是否可以改變單元測試的調用方式?
- 6. 是否可以在rspec功能測試中調用truncate方法?
- 7. 是否有一些Assert方法可以用於單元測試方法是否拋出異常?
- 8. 有什麼方法可以確定它是否是測試(.NET)?
- 9. 測試複雜行爲時,在單元測試中是否可以有多個斷言?
- 10. 是否可以在Ruby on Rails中調試單元測試?
- 11. 是否可以在調試模式下運行單元測試?
- 12. 單元測試方法從另一個方法調用C#
- 13. 單元測試調用另一個類的方法的方法
- 14. 是否有可能禁用一些宏谷歌測試斷言?
- 15. 單元測試是否可以進行P/Invoke調用?
- 16. 爲什麼要測試一個方法是否被調用?
- 17. 是否可以使用Angular方案編寫單元測試?
- 18. Javascript單元測試茉莉花/單元測試 - 我如何測試一個私有函數是否被調用?
- 19. 是否可以從SilkTest測試用例調用.NET Invoke方法?
- 20. 單元測試:檢查是否被調用的方法
- 21. 單元測試失敗,出現sys.exit
- 22. Python:在單元測試中處理sys.exit?
- 23. 單元測試,以確定是否顯示一個彈出框
- 24. 是否可以使用單個測試測試多個類
- 25. 是否有可能單元測試依賴NHibernate Detached Criteria的方法?
- 26. 爲單一方法編寫classist和mockist單元測試是否有優勢?
- 27. 是否可以創建一個單元測試來測試KeyListener的子類?
- 28. 單元測試:如何斷言同一方法的多個調用?
- 29. PHP單元測試如何才能不嘲笑的方法可以被調用
- 30. 單元測試確保一個方法調用另一個方法
+1,除了如果他想驗證它調用'sys.exit(1)'(而不是像'sys.exit(0)'),你需要實際聲明它的'code'是1.我想你可以用'assertRaisesRegexp(SystemExit,'1')'做到這一點? – abarnert 2013-03-28 00:37:22
我只是在編輯:) – 2013-03-28 00:39:21
我確定有一個'unittest'方法可以讓你傳遞一個異常和一個_callable謂詞來運行異常或其參數,而不僅僅是一個_regex模式_在字符串上運行它的第一個arg的代表......但我猜不是。還有其他的測試模塊嗎? – abarnert 2013-03-28 00:43:21