2015-06-19 113 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