Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 调用TestCase类会导致函数运行两次_Python_Python 3.x_Python Unittest - Fatal编程技术网

Python 调用TestCase类会导致函数运行两次

Python 调用TestCase类会导致函数运行两次,python,python-3.x,python-unittest,Python,Python 3.x,Python Unittest,当我注意到一个我不理解的奇怪行为时,我正试图动态地创建测试函数。为了便于理解,我将代码简化为此。我正在Python3.6.7上运行它 代码: 如您所见,test函数test_x运行了两次,最后一个print语句没有执行 因此,我的问题是: 为什么测试函数运行两次 为什么print语句print(“测试结束”)没有执行 一,。为什么测试函数运行两次 因为unittest代码在模块的命名空间中找到两个对象,它们是unittest.TestCase类、MyTestCase和x。它不会检查它们是否是同一

当我注意到一个我不理解的奇怪行为时,我正试图动态地创建测试函数。为了便于理解,我将代码简化为此。我正在Python3.6.7上运行它

代码:

如您所见,test函数test_x运行了两次,最后一个print语句没有执行

因此,我的问题是:

  • 为什么测试函数运行两次
  • 为什么print语句print(“测试结束”)没有执行
  • 一,。为什么测试函数运行两次

    因为
    unittest
    代码在模块的命名空间中找到两个对象,它们是
    unittest.TestCase
    类、
    MyTestCase
    x
    。它不会检查它们是否是同一个对象。(好吧,它知道这一点,因为它不会将
    x
    视为要测试的新类,所以它不会再次调用
    setUpClass
    ;请参阅。)

    二,。为什么print语句print(“测试结束”)没有执行

    默认情况下,运行测试后,
    unittest.main()
    调用
    sys.exit()
    。您可以通过添加参数
    exit=False
    来禁用此功能:

    if __name__ == "__main__":
        print('test start')
        unittest.main(exit=False)
        print('test end')
    
    test start
    SET UP
    hi
    .hi
    .
    ----------------------------------------------------------------------
    Ran 2 tests in 0.000s
    
    OK
    
    if __name__ == "__main__":
        print('test start')
        unittest.main(exit=False)
        print('test end')