2014-12-27 18 views
0

例如,我想在我的unittest類的方法中測試一個具有語法的函數,我可以如下使用代碼嗎?如何在python的unittest中使用assertRaises()來捕獲語法錯誤?

self.assertRaises(SyntaxError, my_function) 

當我使用它時,它只出現語法錯誤的回溯,而不是顯示有多少測試已通過。

+0

可以顯示錯誤? – GLHF

+0

Traceback(最近一次調用最後一次): 語法錯誤:123a:c:\ Users \ wy \ Desktop \ python \ error_library.py,line 58,pos 8 – jack

+0

這就像我的模塊中有語法錯誤,其中包含我導入的函數,python停止運行我運行的unittest模塊。 – jack

回答

1

爲了測試運行,代碼必須由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建議的方法,這一下更簡單和更清潔的一個。

1

繼沃倫Weckesser的解釋,你可以測試一個import function拋出一個錯誤:

self.assertRaises(SyntaxError, __import__, "error_library") 

對於Python 2.7及以上,importlib.import_module()可以/應該使用:

self.assertRaises(SyntaxError, importlib.import_module, "error_library") 
相關問題