2014-11-13 19 views
0

부스트 유닛 테스트 프레임 워크를 사용하여 C++ \ Qt 코드에서 유닛 테스트를 수행합니다.부스트 유닛 테스트 Qt 신호

기본적으로 documentation과 같이 BOOST_FIXTURE_TEST_CASE 매크로가 사용됩니다. 각 테스트마다 이벤트 루프를 설정하고 테스트 코드가 신호와 슬롯을 사용할 수 있도록 QApplication의 인스턴스를 만듭니다.

신호가 방출되는지 여부를 테스트해야합니다. 누구든지이 문제에 대한 경험이 있습니까? BOOST_FIXTURE_TEST_CASE 생성 클래스는 Q_OBJECT를 포함하지 않으며 문제가되는 QObject에서 파생되지 않습니다. 이 문제에 대한 의견을 보내주십시오.

답변

0

비슷한 문제가 있지만 Boost Unit Test 프레임 워크가 아닌 gtest를 사용하고 있습니다. 아직 답을 얻지는 못했지만 지금은 진전을 이루고 있습니다.

우선 QApplication 또는 QCoreApplication이 main 외부에서 생성 될 때 Qt는 그것을 좋아하지 않습니다. 또한, QApplication은 Qt의 GUI 클래스에 적용되는 반면 QCoreApplication은 QTcpSocket과 같은 콘솔 전용 클래스 (지금 테스트하려는 클래스)에 사용될 수 있습니다. GUI 도구는 실제로 테스트 할 수 없으므로 테스트중인 모든 것을 별도의 클래스로 작성해야합니다. 이렇게하면 GUI를 다루지 않고 코드를 단위 테스트 할 수 있으며 QCoreApplication을 사용할 수도 있습니다.

다음 단계는 QThread를 사용하여 테스트하려는 개체를 호스팅하는 스레드를 회전하는 것입니다. QThread에는 exec() 함수를 호출하여 실행할 수있는 자체 이벤트 루프가 있습니다.

테스트 케이스를 작성하여 QThread에서 가져 오면 신호와 슬롯에 사용할 수있는 이벤트 루프가 생기므로 신호가 방출되었는지 쉽게 판단 할 수 있습니다. 이벤트 루프가 없으면 신호는 그냥 앉아서 아무 것도하지 않으므로 전송되었는지 테스트 할 방법이 없습니다!