我正在使用 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
原文由 Ben RR 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 concurrent.futures.ThreadPoolExecutor 或 https://docs.python.org/3/library/threading.html#threading.excepthook 来收集线程中抛出的异常
在 pytest 上,这些是为您收集的: https ://docs.pytest.org/en/latest/how-to/failures.html?highlight=unraisable#warning-about-unraisable-exceptions-and-unhandled-thread-exceptions