例如,我想在我的unittest類的方法中測試一個具有語法的函數,我可以如下使用代碼嗎?如何在python的unittest中使用assertRaises()來捕獲語法錯誤?
self.assertRaises(SyntaxError, my_function)
當我使用它時,它只出現語法錯誤的回溯,而不是顯示有多少測試已通過。
例如,我想在我的unittest類的方法中測試一個具有語法的函數,我可以如下使用代碼嗎?如何在python的unittest中使用assertRaises()來捕獲語法錯誤?
self.assertRaises(SyntaxError, my_function)
當我使用它時,它只出現語法錯誤的回溯,而不是顯示有多少測試已通過。
爲了測試運行,代碼必須由Python解釋器進行字節編譯。在函數運行之前,當包含函數的模塊被導入時會發生這種情況。在編譯過程中,會生成SyntaxError。
在您的測試模塊,你可以/包import語句在一個try情況除外:
raised = False
try:
import foo
except SyntaxError:
# A syntax error was generated during the import...
raised = True
self.assert_(raised, "'import foo' failed to raise a SyntaxError.")
或使用由@alecxe建議的方法,這一下更簡單和更清潔的一個。
繼沃倫Weckesser的解釋,你可以測試一個import function拋出一個錯誤:
self.assertRaises(SyntaxError, __import__, "error_library")
對於Python 2.7及以上,importlib.import_module()
可以/應該使用:
self.assertRaises(SyntaxError, importlib.import_module, "error_library")
可以顯示錯誤? – GLHF
Traceback(最近一次調用最後一次): 語法錯誤:123a:c:\ Users \ wy \ Desktop \ python \ error_library.py,line 58,pos 8 – jack
這就像我的模塊中有語法錯誤,其中包含我導入的函數,python停止運行我運行的unittest模塊。 – jack