2017-09-22 13 views
1

QTest은 단위 테스트를 별도의 실행 파일로 구성하는 것이 좋습니다. 이에 대한 특별한 매크로가 있으며, 메인 함수를 생성합니다 : QTEST_MAIN.qExec을 사용하여 Qt 테스트 스위트 생성

이 방법은 매우 깨끗하지는 않지만 모든 테스트를 한 번에 실행하는 것이 훨씬 유용합니다.

Qt: run unit tests from multiple test classes and summarize the output from all of them

http://www.davideling.it/2014/01/qtest-multiple-unit-test-classes/

https://alexhuszagh.github.io/2016/using-qttest-effectively/

솔루션은 매크로 QTEST_MAIN를 사용하여 포기했다 : 그래서 내가 이렇게 어떤 가능성이 있는지 검색하고 나는 몇 사람이 같은 솔루션을 제안 발견 실행하려는 테스트를 실행하는 곳에서 자신의 main 함수를 작성하십시오.

int main(int argc, char *argv[]) 
{ 
    int status = 0; 

    { 
     TestA ta; 
     status |= QTest::qExec(&ta, argc, argv); 
    } 

    { 
     TestB tb; 
     status |= QTest::qExec(&tb, argc, argv); 
    } 

    return status; 
} 

그러나 좋은 아이디어 인 것으로 나타났습니다. 문제가 있습니다. 파일과 실행 개인에게 로깅 테스트 출력에 대한 명령 줄 옵션으로,

독립 테스트 어플리케이션

,이 기능이 한 번 이상 더 호출 할 수 없습니다 : qExec에 대한 Qt's documentation이 같은 소리 부분이있다 테스트 기능은 올바르게 작동하지 않습니다.

그 사람들이 밝힌 해결책은 다음과 같이 제안합니다. qExec 번 이상 실행 중. 누구든지 정확히 command-line options for logging test output to files and executing individual test functions will not behave correctly 정확히 무슨 뜻인지 설명 할 수 있습니까?

정확히이 접근법에 문제가있을 수 있습니까?

+1

FWIW,이 명백한 결핍 역시 나를 혼란스럽게 만들었습니다. 다른 테스트 러너 프레임 워크 (예 : GoogleTest) 만 사용합니다. 슬롯과 신호를위한 Qt 전용 기계 장치와 결합 (https://stackoverflow.com/a/12687255/14637) 할 수 있습니다. 또한 https://stackoverflow.com/a/3804999/14637에 대한 의견을 통해 귀하의 질문에 대한 답변을 얻을 수 있습니다. – Thomas

답변

1

설명서는 아마도 Logging Options에 대해 이야기하고 있습니다. qMain을 두 번 호출하고 두 호출에 -o 옵션을 전달하면 두 번째 호출이 첫 번째 호출의 로그 파일을 덮어 씁니다. 이것이 결코 일어나지 않을 것이라는 것을 안다면 경고를 무시하도록 선택할 수 있습니다. 명령 행 인수를 qExec에 전달할 수도 없으므로 출력을 표준 출력으로 강제 설정하지만 다른 인수를 전달할 수있는 능력은 상실됩니다.

Qt Creator에서 테스트 케이스를 실행하려면 qExec를 두 번 이상 호출하지 않아야합니다. 각 테스트 클래스는 테스트 목록에 표시되지만 하나만 실행하면 모든 클래스가 실행되므로 한 클래스에 대해 표시된 모든 클래스에 대한 결과가 표시됩니다. 그리고 모든 테스트 (기본값)를 실행하면 결과의 제곱 양을 얻게됩니다.

여러 실행 가능 방식이 마음에 들지 않으면 Google 테스트를 사용하십시오. 위의 문제가 없으며 작성자가이를 지원합니다. 설정은 매우 쉽습니다 : Autotest 프로젝트를 만들 때 마법사가 당신을 안내 할 것입니다. Google Test를 다운로드하기 만하면됩니다. Google 테스트 사례가 테스트보기에서 Qt 테스트 케이스 바로 옆에 표시됩니다.