测试成功,仍然可以追溯

时间:2012-02-08 22:51:01

标签: python unit-testing

我正在使用Python的unittest库并且所有测试都成功,但我仍然得到追溯,我无法理解如何解决问题。

........
----------------------------------------------------------------------
Ran 8 tests in 0.020s

OK

Traceback (most recent call last):
  File "C:\Users\Paul\Desktop\bloomfilter\test_bloomfilter.py", line 85, in <module>
    unittest.main()
  File "C:\Programming\PythonX86\Python27\lib\unittest\main.py", line 95, in __init__
    self.runTests()
  File "C:\Programming\PythonX86\Python27\lib\unittest\main.py", line 231, in runTests
    sys.exit(not self.result.wasSuccessful())
SystemExit: False
>>> 

5 个答案:

答案 0 :(得分:14)

您似乎在Python shell中运行,它会为您捕获异常,因此您可以继续调试。如果您已从命令行运行,则行

sys.exit(not self.result.wasSuccessful())

将以退出代码0退出程序,这表示成功(如果您不熟悉程序与shell的交互方式,这可能会违反直觉)。但是,由于您在解释器中运行,因此会捕获异常。

我建议您的程序或测试没有任何问题。单元测试框架可能只是不希望以交互方式运行!

答案 1 :(得分:13)

为了避免执行追溯结束:

if __name__ == '__main__':
    unittest.main(exit=False)

答案 2 :(得分:7)

以:

结束您的unittest文件
if __name__=='__main__':
    try:
        unittest.main()
    except SystemExit as inst:
        if inst.args[0] is True: # raised by sys.exit(True) when tests failed
            raise

答案 3 :(得分:3)

sys.exit(not self.result.wasSuccessful())

当我假设我的Python包中的__main__.py始终拥有__name__"__main__"时,我碰到了这个 - 但是当我通过发现运行我的单元测试时,我发现它们将被执行,但使用不同的__name__ - "package.__main__"

因此,我在__main__.py中确实需要以下内容,就像在简单的Python脚本中一样:

if __name__ == '__main__':
    main()

而不仅仅是

main()

如果mainunittest.main,请使用

进行调用
if __name__ == '__main__':
    main(exit=False)

如果您希望过程在交互模式下保持不变,如果您正在调用

python -im package_name

如果您正在使用:

python -m unittest discover 

然后我认为exit=False不重要。

答案 4 :(得分:1)

无论您使用什么来运行这些测试,它都会捕获SystemExit异常并打印回溯。当您编写捕获异常的代码时,您应该注意不要捕获您实际上不想捕获的异常,例如SystemExit(由sys.exit()引发以结束程序)并且通常{{1 (由control-C引发。)