2013-06-24 50 views
2

有沒有辦法在測試期間「捕獲」由sys.exit()打印的錯誤消息,並將其與另一個字符串進行比較?在測試期間從sys.exit()捕獲錯誤消息

一些背景:在我正在使用的Python腳本中,我一直在使用sys.exit()來打印出更具體的錯誤消息(並避免通常出現的回溯)。

try: 
    do_something() 
except IOError: 
    sys.exit('my error message') 

其他時候,我只是用常規消息(尤指ConfigParser):

except ConfigParser.NoSectionError as err: 
    sys.exit(err) 

我想那裏捕獲錯誤消息,並可能使用的assertIs(err, 'my intended error message')比較。

我正在使用的腳本有兩個版本,所以我會欣賞一些例子,如果它們之間存在差異,請執行此操作。

回答

3

sys.exit dosn't do anythin else then raising SystemExit,你可以像其他異常一樣捕獲它。

關於上下文管理器的示例只是向您展示如何使用它來獲取在with塊中拋出的異常,如果需要對其執行檢查。

在SystemExit的情況下,這應該是這樣的:

with self.assertRaises(SystemExit) as cm: 
    sys.exit('some message') 

self.assertEqual(cm.exception.args[0], 'some message') 
... 
+0

感謝您的解釋。這給了我需要的線索。 – Isxek

+0

我現在不接受這個 - 如果可能,我想看看其他建議。如果幾天後沒有其他事情出現,我會再次接受。 – Isxek

0

assertEqual是unittest的TestCase的一部分,所以如果你不使用它,它不會幫助你。你將不得不放棄這個過程來看看會發生什麼。爲什麼不寫一些單元測試呢?

+0

I *是*試着寫單元測試。 :)我需要做的是獲得'sys.exit('我的錯誤信息')生成的錯誤消息,並使用'assertEqual'來測試是否確實打印出錯誤消息。我認爲第一句話說得很清楚。 – Isxek

相關問題