Używam Pythona unittest
i chciałbym napisać test, który rozpoczyna kilka wątków i czeka na ich zakończenie. Wątki wykonują funkcję z pewnymi asercjami unittest
. Jeśli któreś z twierdzeń nie powiedzie się, żałuję, że test się nie powiódł. Wydaje się, że tak nie jest.Python unittest and multithreading
EDIT: Minimal runnable przykład (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()
i wyjście jest:
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
Myślę, że idziesz o tym źle. Pokaż nam próbkę testowanej funkcji. – Dan
@Dan: To może być cokolwiek, nawet najprostszy 'def test_fail (self): self.fail()' –
Więc nigdy nie powinieneś strzelać do wątków w swoich testowych przypadkach. Jeśli testowana funkcja uruchamia wątki, możesz przetestować to zachowanie, kpiąc z funkcji celu i wykonując asercje względem wywołań. Możesz nawet kpić z klasy wątków. – Dan