代码之家  ›  专栏  ›  技术社区  ›  Eden Dupont

unittest之后的命令不执行

  •  2
  • Eden Dupont  · 技术社区  · 7 年前

    我在python 3.6中导入了unittest,并这样使用它:

    class TestFunc(unittest.TestCase):
            def test_half(self):
                pass
            def test_merge(self):
                pass
            def test_decrypt(self):
                pass
            def test_rank(self):
                pass
    
    if __name__ == "__main__":
        print("printing before calling unittest")
        unittest.main()
        print("printing after calling unittest")
    

    输出如下所示:

     printing before calling unittest
        ....
    ----------------------------------------------------------------------
    Ran 4 tests in 0.001s
    
    OK
    
    Process finished with exit code 0
    

    第二次呼叫 print i、 e。 print("printing after calling unittest") ,不执行。 为什么在单元测试之后我什么都做不了?测试后如何继续使用代码?

    2 回复  |  直到 7 年前
        1
  •  5
  •   Daniel Roseman    7 年前

    这个 unittest docs 解释一下:

    main 呼叫 sys.exit() 带有指示测试运行成功或失败的退出代码。

    系统。退出() 立即退出脚本,因此永远不会调用最后一行。

    你可以通过传球来避免这种行为 exit=False :

    unittest.main(exit=False)
    
        2
  •  0
  •   Hammad Hassan    3 年前

    只是对前面的答案的快速补充。对 exit=False 工作得很好,但我遇到了测试用例失败的情况,甚至程序的其余部分也在运行(根据当前逻辑,这是预期的)。理想情况下,程序应该在任何测试用例失败的情况下停止。在这种情况下,我只是这样做了。

    status = unittest.main(exit=False)
    if len(status.result.failures) == 0 and len(status.result.errors) == 0:
        # normal remaining execution
    else:
        # exit