问题:单元测试是否可以断言方法调用sys.exit()
我有一个python 2.7方法,有时会调用
sys.exit(1)
当满足正确的条件时,是否可以进行单元测试以验证是否调用了此代码行?
回答 0
是。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
异常来实现的…可以在外部级别拦截出口尝试。
回答 1
这是一个完整的工作示例。尽管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)
回答 2
我在Python单元测试文档搜索“测试异常”中找到了您问题的答案。使用您的示例,单元测试如下所示:
self.assertRaises(SystemExit, your_function, argument 1, argument 2)
记住要包括测试功能所需的所有参数。
回答 3
作为Pavel出色答案的补充说明,如果您正在测试的功能中提供了特定状态,您还可以检查特定状态。例如,如果your_method()
包含以下内容,sys.exit("Error")
则可以专门测试“错误”:
with self.assertRaises(SystemExit) as cm:
your_method()
self.assertEqual(cm.exception, "Error")
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。