2015-06-19 92 views
1

我有一个可以做东西的管理命令,或者可以返回一个sys.exit()Python:在单元测试中处理sys.exit?

我试图处理第二个情况下,在我的单元测试如下:

with self.assertRaises(SystemExit) as cm: 
     call_command('geocode_practices', *args, **opts) 
    self.assertEqual(cm.exception, 1) 

但是这给了我:

AssertionError: None != 1 

我在做什么错?

另外,处理不同场景的最佳方法是什么?目前,如果脚本没有退出,我的测试将失败。

+0

这个测试是否会碰到“do stuff”或者'sys.exit()'的情况?并且该命令是否应该调用'sys.exit()'? – user2357112

+1

管理命令应该可以从其他代码中调用,因此引发'SystemExit'实际上是一个坏主意。 –

+0

@brunodesthuilliers谢谢,那么我应该如何处理退出管理命令? (我想在没有网络连接的情况下优雅地失败。) – Richard

回答

2

显然with块内的代码不会引发异常。请注意,sys.exit()只会引发SystemExit异常。

即使这样做,异常也不会比较等于1.如果不是None,则cm.exception属性包含异常实例,而不是数字。

+0

奇怪的是如果'SystemExit'没有被引发,测试甚至不应该调用'assertEqual'。 – chepner