GoogleTest에서 특정 테스트 케이스를 실행하는 방법


125

내 프로젝트에 대한 함수 / 메서드를 작성하려고하는데, 어떤 테스트 케이스를 실행할 것인지 사용자에게 묻습니다. 아래와 같이 보입니다 ...,

Test_Cases_1
         |_TestNo1
         |_TestNo2....so on
Test_Cases_2
         |_TestNo1
         |_TestNo2....so on
....
....so on
Test_Cases_N
         |_TestNo1
         |_TestNo2....so on

이제 문제는 프로젝트를 실행하는 동안 실행하려는 모든 테스트 케이스가 무엇인지 묻는 것입니다. 내가 선택하는 경우 Test_Cases_1Test_Cases_N. 그런 다음이 두 가지 테스트 케이스를 실행하고 Test_Cases_2 to ..... 결과 창에서도 Test_Cases_1및 의 결과를보고 싶습니다 Test_Cases_N.

따라서 GoogleTest가 표시되면 다음과 같은 메서드가 있습니다 test_case_to_run_count(). 그러나 모든 것이 test casesTest_F () 메서드로 등록되고 있습니다. 그래서 많은 분석을했지만 여전히 해결책을 찾지 못했습니다. 제발 도와주세요.

답변:


181

고급 옵션 을 사용 하여 Google 테스트를 실행할 수 있습니다 .

일부 단위 테스트 만 실행하려면 여러 테스트와의 일치를 위해 및 와일드 카드를 --gtest_filter=Test_Cases1*허용하는 값이있는 명령 줄 옵션을 사용할 수 있습니다 . 나는 그것이 당신의 문제를 해결할 것이라고 생각합니다.*?

UPD :

문제는 특정 테스트 케이스 를 실행 하는 방법이었습니다 . gtest를 GUI와 통합하는 것은 또 다른 문제입니다. 접근 방식에 대한 세부 정보를 제공하지 않았기 때문에 설명 할 수 없습니다. 그러나 다음 접근 방식이 좋은 시작이라고 생각합니다.

  1. 테스트를 실행하여 모든 테스트 케이스 가져 오기 --gtest_list_tests
  2. 이 데이터를 GUI로 구문 분석
  3. 실행하려는 테스트 케이스 선택
  4. 옵션으로 테스트 실행 파일 실행 --gtest_filter

나는 이것을 권장하고 프롬프트 기반 시스템이 필요한 경우 사용자 입력을 받고 그에 따라 테스트 프로그램을 실행하는 래퍼 스크립트를 만드는 것이 좋습니다.
boycy

@nogard : 네, 맞아요,하지만 내 / 우리의 목표는있을 것입니다 GUI,하는 것입니다 TreeTestCasesTestNo. 그래서 --gtest_filter=..도움이 될까요?
Rasmi Ranjan Nayak

@nogard : 도움을 주셔서 감사합니다 ... 당신이 지시 한대로 계속 진행할 것입니다 .. 완료되면 알려 드리겠습니다.
Rasmi Ranjan Nayak

1
@nogard : 나는 당신이 지시 한대로 똑같이하고 있습니다; int main(int argc, char **argv) { //::testing::GTEST_FLAG(list_tests) = true; // For Testing InitGoogleTest(&argc, argv); ::testing::GTEST_FLAG(list_tests) = true; ........ RUN_ALL_TEST();...}그러나 Testcase 및 TestNo 만 인쇄합니다. 그러나 테스트를 실행하지 않습니다. 이제 어떻게 테스트를 실행할 수 있습니까?
Rasmi Ranjan Nayak

@RasmiRanjanNayak : 나는 메인을 전혀 변경하지 말라고 제안했습니다. 나는 테스트를 두 번 실행하는 것을 제안합니다 : --gtest_list_tests로 처음 실행 한 다음 --gtest_filter
nogard

91

@Rasmi Ranjan Nayak 및 @nogard 답변을 요약하고 다른 옵션을 추가합니다.

콘솔에서

다음 --gtest_filter과 같은 플래그를 사용해야합니다.

--gtest_filter=Test_Cases1*

(속성 | 구성 속성 | 디버깅 | 명령 인수에서도이 작업을 수행 할 수 있습니다.)

환경에

다음 GTEST_FILTER과 같이 변수를 설정해야합니다.

export GTEST_FILTER = "Test_Cases1*"

코드에

다음 filter과 같이 플래그를 설정해야합니다.

::testing::GTEST_FLAG(filter) = "Test_Cases1*";

주요 기능은 다음과 같습니다.

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    ::testing::GTEST_FLAG(filter) = "Test_Cases1*";
    return RUN_ALL_TESTS();
}

사용할 수있는 문자열의 구문에 대한 자세한 내용 은 테스트의 하위 집합 실행 섹션을 참조하십시오 .


6
"코드"부분이 매우 유용합니다 !! 이것이 제가 찾고 있던 것입니다 !!
Iero

28

마침내 나는 ::test::GTEST_FLAG(list_tests) = true;wrt 콘솔이 아닌 프로그램에서 몇 가지 대답을 얻었습니다 .

당신이 사용하려는 경우 --gtest_filter =*; /* =*, =xyz*... etc*/// 당신은 콘솔에서 사용할 필요가있다.

따라서 내 요구 사항은 콘솔이 아닌 프로그램에서 사용하는 것입니다.

Updated:-

마침내 나는 프로그램에서 같은 것을 업데이트하는 것에 대한 답을 얻었습니다.

 ::testing::GTEST_FLAG(filter) = "*Counter*:*IsPrime*:*ListenersTest.DoesNotLeak*";//":-:*Counter*";
      InitGoogleTest(&argc, argv);
RUN_ALL_TEST();

그래서 모든 답변에 감사드립니다.

당신은 훌륭합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.