gpt4 book ai didi

python - 调用 TestCase 类导致函数运行两次

转载 作者:行者123 更新时间:2023-11-28 18:05:53 25 4
gpt4 key购买 nike

当我注意到一个我不理解的奇怪行为时,我正在尝试动态创建测试函数。为了便于理解,我将代码缩减为这样。我在 python 3.6.7 上运行它

代码:

import unittest

class MyTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('SET UP')

def test_x(self):
print('hi')

x = MyTestCase # <-This causes the test function to run twice, Why???

if __name__ == "__main__":
print('test start')
unittest.main()
print('test end') # <- This does not get printed

输出:

test start
SET UP
hi
.hi
.
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

可以看到,测试函数test_x正在运行两次,最后的打印语句没有执行

所以我的问题是:

  1. 为什么测试函数运行了两次?
  2. 为什么打印语句print('test end')没有执行?

最佳答案

1。为什么测试函数运行了两次?

因为 unittest 代码在模块的命名空间中找到 两个 对象,它们是 unittest.TestCase 类,MyTestCasex。它不会检查这些是否实际上是相同 对象。 (好吧,它一些意识到了这一点,因为它不会将 x 视为要测试的新类,因此它不会调用 setUpClass 再次查看 "Class and Module Fixtures" 。)

2。为什么打印语句print('test end')没有执行?

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

if __name__ == "__main__":
print('test start')
unittest.main(exit=False)
print('test end')

关于python - 调用 TestCase 类导致函数运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53531109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com