测试成功,仍然可以追溯

Pau*_*nta 17 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
>>> 
Run Code Online (Sandbox Code Playgroud)

mat*_*ski 14

您似乎正在使用Python shell运行,它会为您捕获异常,以便您可以继续调试.如果您一直在从命令行运行,那么该行

sys.exit(not self.result.wasSuccessful())
Run Code Online (Sandbox Code Playgroud)

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

我建议您的程序或测试没有任何问题.unittests框架可能只是没想到会以交互方式运行!


Flo*_* B. 14

为了避免执行追溯结束:

if __name__ == '__main__':
    unittest.main(exit=False)
Run Code Online (Sandbox Code Playgroud)


Rem*_*emi 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
Run Code Online (Sandbox Code Playgroud)

  • 您不应该检查`is True`-应该删除该部分。但是,除了所有这些之外,您还应该提供`exit = False`...。 (2认同)