unit testing是否有可能声明一个方法调用sys.exit()
我有一个有时调用的Python 2.7方法
sys.exit(1)
是否有可能进行unit testing,validation这条代码被称为满足正确的条件时?
是。 sys.exit
引发了SystemExit
,所以你可以用assertRaises
来检查它:
with self.assertRaises(SystemExit): your_method()
SystemExit
实例具有设置为build议退出状态的属性code
,并且由assertRaises
返回的上下文pipe理器将捕获到的exception实例作为exception
,因此检查退出状态非常简单:
with self.assertRaises(SystemExit) as cm: your_method() self.assertEqual(cm.exception.code, 1)
sys.exit文档 :
从Python退出。 这是通过提高
SystemExit
exception来实现的……可以在外层拦截退出尝试。
这是一个完整的工作示例。 尽pipe帕维尔的回答非常好,但是我花了一段时间才弄明白这一点,所以我在这里包括它,希望这会有所帮助。
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)
作为Pavel优秀答案的附加说明,如果您正在testing的函数中提供了特定的状态,您还可以检查它们。 例如,如果your_method()
包含以下sys.exit("Error")
则可以专门testing“Error”:
with self.assertRaises(SystemExit) as cm: your_method() self.assertEqual(cm.exception, "Error")
我在Pythonunit testing文档search“Testing for Exceptions”中find了你的问题的答案。 用你的例子,unit testing看起来像下面这样:
self.assertRaises(SystemExit, your_function, argument 1, argument 2)
请记住包含testing您的function所需的所有参数。