2014-12-27 43 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") 
相关问题