Tra*_*ear 83 python unit-testing
我有一个python 2.7方法,有时会调用
sys.exit(1)
Run Code Online (Sandbox Code Playgroud)
是否可以进行单元测试以验证在满足正确条件时是否调用此代码行?
Pav*_*sov 132
是.sys.exit加注SystemExit,所以你可以检查assertRaises:
with self.assertRaises(SystemExit):
your_method()
Run Code Online (Sandbox Code Playgroud)
实例SystemExit具有code设置为建议退出状态的属性,并且返回的上下文管理器assertRaises具有捕获的异常实例exception,因此检查退出状态很容易:
with self.assertRaises(SystemExit) as cm:
your_method()
self.assertEqual(cm.exception.code, 1)
Run Code Online (Sandbox Code Playgroud)
退出Python.这是通过引发
SystemExit异常来实现的......可以拦截外层的退出尝试.
Tra*_*ear 11
这是一个完整的工作示例.尽管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)
Run Code Online (Sandbox Code Playgroud)
小智 6
我在Python 单元测试文档搜索“异常测试”中找到了您的问题的答案。使用您的示例,单元测试如下所示:
self.assertRaises(SystemExit, your_function, argument 1, argument 2)
Run Code Online (Sandbox Code Playgroud)
请记住包含测试函数所需的所有参数。