【发布时间】:2017-03-19 17:46:27
【问题描述】:
我正在使用 python 的unittest 并想编写一个启动几个线程并等待它们完成的测试。线程执行具有一些unittest 断言的函数。如果任何断言失败,我希望测试失败。好像不是这样的。
编辑:最小可运行示例(python3)
import unittest
import threading
class MyTests(unittest.TestCase):
def test_sample(self):
t = threading.Thread(target=lambda: self.fail())
t.start()
t.join()
if __name__ == '__main__':
unittest.main()
输出是:
sh-4.3$ python main.py -v
test_sample (__main__.MyTests) ... Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib64/python2.7/threading.py", line 813, in __bootstrap_inner
self.run()
File "/usr/lib64/python2.7/threading.py", line 766, in run
self.__target(*self.__args, **self.__kwargs)
File "main.py", line 7, in <lambda>
t = threading.Thread(target=lambda: self.fail())
File "/usr/lib64/python2.7/unittest/case.py", line 450, in fail
raise self.failureException(msg)
AssertionError: None
ok
----------------------------------------------------------------------
Ran 1 test in 0.002s
OK
【问题讨论】:
-
我认为你做错了。向我们展示一个被测函数的样本。
-
@Dan:可以是任何东西,甚至是最简单的
def test_fail(self): self.fail() -
因此您永远不必在测试用例中触发线程。如果被测函数正在触发线程,那么您可以通过模拟目标函数并对调用进行断言来测试该行为。你甚至可以模拟线程类。
-
这提出了一个有趣的问题,是否可以重现线程代码的测试结果?
-
不要在你的被测系统中模拟线程模块或函数
标签: python unit-testing python-3.x python-unittest