J'utilise python's unittest
et j'aimerais écrire un test qui démarre quelques threads et attend qu'ils se terminent. Les threads exécutent une fonction qui a quelques unittest
assertions. Si l'une des assertions échoue, je souhaite que le test échoue. Cela ne semble pas être le cas.Python unittest et multithread
EDIT: exemple minimal runnable (de 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()
et la sortie est:
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
Je pense que vous vous y trompez. Montrez-nous un échantillon de la fonction testée. – Dan
@Dan: Cela peut être n'importe quoi, même le plus simple 'def test_fail (self): self.fail()' –
Ainsi, vous ne devriez jamais avoir à déclencher des threads dans vos cas de test. Si la fonction testée déclenche des threads, vous pouvez tester ce comportement en se moquant de la fonction cible et en faisant des assertions contre les appels. Vous pouvez même vous moquer de la classe de threading. – Dan