如何在python的unittest中使用assertRaises()来捕获syntaxerror?

时间:2014-12-27 04:49:37

标签: python exception syntax-error unit-testing

例如,我想测试一个具有语法的函数,在我的unittest类的方法中,我可以使用如下代码吗?

self.assertRaises(SyntaxError, my_function)

当我使用它时,它只显示语法错误的追溯,而不是显示已经通过了多少测试。

2 个答案:

答案 0 :(得分:1)

为了运行测试,代码必须由Python解释器进行字节编译。在运行函数之前导入包含函数的模块时会发生这种情况。在编译期间,生成了SyntaxError。

在测试模块中,您可以将try语句包装在try / except:

    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 :(得分:1)

按照Warren Weckesser的解释,您可以测试import function是否会引发错误:

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

对于Python 2.7及更高版本,可以/应该使用importlib.import_module()

self.assertRaises(SyntaxError, importlib.import_module, "error_library")