Я использую python's unittest
и хотел бы написать тест, который запускает несколько потоков и ждет их завершения. Нити выполняют функцию, которая имеет некоторые утверждения unittest
. Если какое-либо из утверждений терпит неудачу, я хочу, чтобы тест был неудачным. Кажется, это не так.Python unittest и многопоточность
EDIT: Минимальный работоспособный пример (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
@ Dan: Это может быть что угодно, даже самый простой 'def test_fail (self): self.fail()' –
Поэтому вам не придется запускать потоки в ваших тестовых случаях. Если тестируемая функция запускает потоки, вы можете проверить это поведение, высмеивая целевую функцию и делая утверждения против вызовов. Вы можете даже высмеять класс потоковой передачи. – Dan