2010-05-11 8 views
5

Qt Creator에서 GUI 응용 프로그램을 개발 중이고 일부 단위 테스트를 작성하려고합니다.QtCreator에서 qtestlib 단위 테스트를 실행하는 방법

나는 This guide을 따라 QtTestlib로 단위 테스트를하고 프로그램을 잘 컴파일합니다. 하지만 어떻게 실행합니까? 나는 그들이 릴리스 빌드면 디버그 buid 및 실행되지 않으면 GUI 응용 프로그램이 시작되기 전에 실행되도록하고 싶습니다.

답변

4

마지막으로 앱을 시작하기 전에 테스트를 실행하는 방법을 알아 냈습니다. 메인 함수에

#include <QtTest/QtTest> 

TestClass::runTests() 
{ 
    TestClass * test = new TestClass(); 

    QTest::qExec(test); 
    delete test; 
} 

할 :

내가 테스트를 실행하는 테스트 클래스 내의 하나 개의 정적 메소드를 첨가

int main(int argv, char *args[]) 
{ 
    ::TestsClas::runTests(); 

    QApplication app(argv, args); 
    MainWindow mainWindow; 
    mainWindow.setGeometry(100, 100, 800, 500); 
    mainWindow.show(); 

    return app.exec(); 
} 

결과는 애플리케이션 출력 창에 출력되는 시험.

+7

테스트 코드로 애플리케이션 메인을 오염시키지 않으려합니다. – jkyle

2

Qt 생성자는 현재 (Qt Creator 2.0beta까지) 실행중인 유닛 테스트를 명시 적으로 지원하지 않습니다. 당분간 수동으로 테스트를 시작해야합니다.

qmake 대신 cmake와 같은 빌드 시스템을 사용하는 경우 빌드 프로세스 자체의 일부로 자동으로 단위 테스트를 실행할 수 있습니다. 불행히도 qmake를 사용하여이 작업을 수행하는 방법을 알지 못합니다. CMake는 qmake뿐만 아니라 Qt 생성자도 지원합니다.

+0

개인적으로, 저는 꽤 좋은 것으로 생각되는 cmake를 찾습니다. 나는 심지어 CTEST를 사용하여 QTEST 유닛 테스트 클래스를 Creator를 통해 일괄 실행합니다. 커스텀 빌드 구성에서. – jkyle

18

주 프로젝트에 테스트 코드를 넣지 마십시오. 단위 테스트를 위해 별도의 프로젝트를 작성한 다음이를 빌드하고 실행해야합니다. 테스트를 실행하기 위해 기본 프로젝트를 수정하지 마십시오.

이상적으로는 자동으로 단위 테스트 프로젝트를 호출하고 릴리스를 빌드하는 빌드 서버를 설정해야합니다. 이 스크립트를 작성할 수 있습니다.

단위 테스트를 실행하기 위해 메인 애플리케이션을 해킹하지 마십시오. 통합 레벨 테스트 (예 : 프로그램이 완전히 컴파일되고 통합 된 후 작동하는 방식을 테스트)를 수행해야하는 경우 외부 스크립트 소스에서 프로그램을 테스트 할 수있는 다른 통합 테스트 프레임 워크를 사용해야합니다. FrogLogic's Squish은 이러한 프레임 워크 중 하나입니다.

+0

안녕하세요 제임스. 나는 많은 menulist 품목을 가진 신청이다는 것을 생각한. 클릭하면 각 메뉴 항목에 양식이 표시됩니다. 메뉴 목록의 모든 항목을 클릭하고 올바른 양식이 표시되는지 확인하는 단위 테스트를 수행하려면 어떻게합니까? – Owen

+3

단위 테스트를 할 수 없습니다. 그런 종류의 통합 테스트를하기 위해서는 FrogLogic의 Squish와 같은 것이 필요합니다. 단위 테스트는 UI 테스트보다 훨씬 낮은 수준입니다. 적어도 그것은 그것이 작동하는 것을 이해하는 방식입니다.내가 알기를 원하는 이런 물건을 할 수 있다는 것을 알게된다면, 내가 읽은 모든 것은 이것이 단위 테스트의 오용이라고 말했다. –

5

를 사용하여 여러 대상 및 전처리 플래그이를 달성하기 :

int main(int argv, char *args[]) 
{ 
#ifdef TEST 
    ::TestsClas::runTests(); 
#endif 
    QApplication app(argv, args); 
    MainWindow mainWindow; 
    mainWindow.setGeometry(100, 100, 800, 500); 
    mainWindow.show(); 

    return app.exec(); 
} 

그런 다음 프로젝트 창에 가서 "디버그"를 복제하여 새로운 목표 "테스트"를 추가합니다. 빌드 단계에서 Make에 인수를 추가하십시오.

CXXFLAGS+=-DTEST 

그런 식으로 테스트가 테스트 대상에 포함되지만 디버그 또는 릴리스 대상에는 포함되지 않습니다.

관련 문제