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退出。 这是通过提高
SystemExitexception来实现的……可以在外层拦截退出尝试。
这是一个完整的工作示例。 尽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所需的所有参数。