unittest 프레임 워크를 사용하여 멀티 스레드 파이썬 코드, 외부 하드웨어 및 내장 된 C의 통합 테스트를 자동화하고 있습니다. 통합 테스팅을위한 unittesting 프레임 워크의 맹렬한 남용에도 불구하고, 잘. 하나의 문제를 제외하고는 : 스폰 된 스레드에서 예외가 발생하면 테스트가 실패해야합니다. 이것은 unittest 프레임 워크에서 가능합니까?모든 스레드 예외로 인해 Python unittest가 실패하게 만들기
단순하지만 실용적이지 않은 솔루션은 a) 멀티 스레딩을 피하기 위해 코드를 리팩터링하거나 b) 각 스레드를 개별적으로 테스트하는 것입니다. 코드가 외부 하드웨어와 비동기 적으로 상호 작용하기 때문에 그렇게 할 수 없습니다. 또한 예외를 메인 unittest 스레드로 전달하기 위해 어떤 종류의 메시지 전달을 구현하는 것을 고려했습니다. 이를 위해서는 테스트중인 코드에 상당한 테스트 관련 변경이 필요하므로이를 피하고 싶습니다.
예를 들면 시간입니다. x_ExceptionRaiser 클래스를 수정하지 않고 에 예외가 발생하면 아래 테스트 스크립트를 수정하여을 수정할 수 있습니까?
import unittest
import x
class Test(unittest.TestCase):
def test_x(self):
my_thread = x.ExceptionRaiser()
# Test case should fail when thread is started and raises
# an exception.
my_thread.start()
my_thread.join()
if __name__ == '__main__':
unittest.main()
을 아니요. 스레드에서 발생하는 예외에는 자체 컨텍스트가 있고 예외는 주 스레드로 전파되지 않습니다.네가 정말로 원한다면 지나가는 메시지를 피할 수는 없다고 생각한다. 확인 http://stackoverflow.com/questions/2829329/catch-a-threads-exception-in-the-caller-thread-in-python –