[英]Is it possible for a unit test to assert that a method calls sys.exit()?
我有一個有時會調用的 Python 2.7 方法
sys.exit(1)
是否可以進行單元測試來驗證在滿足正確條件時調用了這行代碼?
是的。 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
異常來實現的……可以在外部級別攔截退出嘗試。
這是一個完整的工作示例。 盡管Pavel 的回答很好,但我花了一段時間才弄明白,所以我把它包括在這里,希望它會有所幫助。
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)
我在Python 單元測試文檔搜索“異常測試”中找到了您的問題的答案。 使用您的示例,單元測試如下所示:
self.assertRaises(SystemExit, your_function, argument 1, argument 2)
請記住包含測試函數所需的所有參數。
作為對Pavel 出色回答的附加說明,您還可以檢查特定狀態(如果它們在您正在測試的函數中提供)。 例如,如果your_method()
包含以下sys.exit("Error")
,則可以專門測試“錯誤”:
with self.assertRaises(SystemExit) as cm:
your_method()
self.assertEqual(cm.exception, "Error")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.