Tôi đang sử dụng python's unittest
và muốn viết một bài kiểm tra bắt đầu một vài chủ đề và chờ cho đến khi kết thúc. Các chủ đề thực hiện một hàm có một số xác nhận unittest
. Nếu bất kỳ xác nhận nào thất bại, tôi muốn thử nghiệm, tốt, thất bại. Điều này dường như không đúng.Python unittest và đa luồng
EDIT: Minimal dụ Runnable (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()
và đầu ra là:
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
Tôi nghĩ rằng bạn đang đi sai về điều này. Cho chúng ta thấy một mẫu chức năng đang được kiểm tra. – Dan
@Dan: Nó có thể là bất cứ điều gì, thậm chí là 'def test_fail (self) đơn giản nhất: self.fail()' –
Vì vậy, bạn không bao giờ phải kích hoạt luồng trong các trường hợp thử nghiệm của mình. Nếu chức năng được thử nghiệm đang kích hoạt các luồng thì bạn có thể kiểm tra hành vi đó bằng cách nhai chức năng đích và thực hiện các xác nhận đối với các cuộc gọi. Bạn thậm chí có thể giả lập lớp luồng. – Dan