Ich benutze Python unittest
und möchte einen Test schreiben, der ein paar Threads startet und wartet auf sie zu beenden. Die Threads führen eine Funktion aus, die einige Assertionen hat (unittest
). Wenn eine der Aussagen fehlschlägt, möchte ich, dass der Test fehlschlägt. Dies scheint nicht der Fall zu sein.Python Unittest und Multithreading
EDIT: Minimal runnable Beispiel (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()
und der Ausgang ist:
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
Ich denke, du gehst falsch rüber. Zeigen Sie uns eine Probe der zu testenden Funktion. – Dan
@Dan: Es kann alles sein, auch die einfachste 'def test_fail (self): self.fail()' –
So sollten Sie nie Threads in Ihren Testfällen auslösen müssen. Wenn die zu testende Funktion Threads absetzt, können Sie dieses Verhalten testen, indem Sie die Zielfunktion mokieren und Assertionen gegen die Aufrufe ausführen. Sie können sich sogar über die Threading-Klasse lustig machen. – Dan