Python:在单元测试中处理sys.exit?
我有一个管理命令,可以做一些事情,或者可以返回一个Python:在单元测试中处理sys.exit?,python,unit-testing,Python,Unit Testing,我有一个管理命令,可以做一些事情,或者可以返回一个sys.exit() 在我的单元测试中,我试图处理第二种情况,如下所示: with self.assertRaises(SystemExit) as cm: call_command('geocode_practices', *args, **opts) self.assertEqual(cm.exception, 1) 但这给了我: AssertionError: None != 1 我做错了什么 另外,处理
sys.exit()
在我的单元测试中,我试图处理第二种情况,如下所示:
with self.assertRaises(SystemExit) as cm:
call_command('geocode_practices', *args, **opts)
self.assertEqual(cm.exception, 1)
但这给了我:
AssertionError: None != 1
我做错了什么
另外,处理不同场景的最佳方式是什么?目前,如果脚本不退出,我的测试将失败 显然,
with
块中的代码不会引发异常。请注意,sys.exit()
只会引发一个SystemExit
异常
即使是这样,异常也不会比较为1。如果不是
None
,则cm.exception
属性包含异常实例,而不是一个数字。此测试是针对“do stuff”案例还是针对sys.exit()
案例?这个命令是否应该调用sys.exit()
?管理命令应该可以从其他代码调用,因此引发SystemExit
确实是个坏主意。@brunodesshuilliers谢谢,那么我应该如何处理管理命令的退出?(我想在没有网络连接的情况下优雅地失败。)@Richard奇怪的是,如果没有引发SystemExit
,测试甚至不应该到达对assertEqual
的调用。