我有以下函数打印错误消息并关闭程序:
def show_error_message(error_message):
print(error_message)
sys.exit() # Close Program
现在我创建了unittest并找到this topic来测试sys.exit()
,但它不起作用。我想它是因为它在关闭消息之前打印。
我该如何测试?我可以在项目中随时使用Python标准库中的某些东西来执行与此函数相同的操作吗?
我试图测试的是这样的:
def test_function_runs(self):
"""Basic smoke test: does the function run."""
with self.assertRaises(SystemExit) as cm:
show_error_message('message')
self.assertEqual(cm.exception.code, 1)
我得到的错误是:
Traceback (most recent call last):
File ".test_dynamic_message.py", line 14, in test_function_runs
self.assertEqual(cm.exception.code, 1)
AssertionError: None != 1
我还是陌生人,所以我希望有人可以帮助我 谢谢
答案 0 :(得分:2)
如果值是整数,则指定系统退出状态(已通过) 到C的exit()函数);如果为None,则退出状态为零;如果它 有另一种类型(如字符串),打印对象的值 退出状态是一个。
您正在测试的功能以默认退出代码0退出。
您的测试假设异常中的退出代码为1,当您根据文档预期它为None
时。
答案 1 :(得分:2)
在这种情况下,它的代码是错误的。 您的测试是正确的,无需更改。
成功退出的内容(返回代码0):
def show_error_message(error_message):
print(error_message)
sys.exit() # Close Program
要将错误消息打印到stderr并退出并失败(返回代码1),您需要这样:
def show_error_message_and_quit(error_message):
sys.exit(error_message)
答案 2 :(得分:1)
异常的属性可以是代码,消息,参数等。
class TestExit(unittest.TestCase):
def test_sys_exit_exception(self):
with self.assertRaises(SystemExit) as e:
sys.exit('exit_with_err')
self.assertTrue(isinstance(e.exception, SystemExit))
self.assertEqual(e.exception.code, 'exit_with_err')
self.assertEqual(e.exception.message, 'exit_with_err')
self.assertEqual(e.exception.args, ('exit_with_err',))
def test_show_error_msg_exception(self):
# Test the exception type
with self.assertRaises(SystemExit) as e:
show_error_message('test but not mock exit')
self.assertTrue(isinstance(e.exception, SystemExit))