如何在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_1Test_Cases_N

因此,如果我将看到GoogleTest,则有一个称为的方法test_case_to_run_count();但是所有这些test cases都已通过Test_F()方法注册。因此,我做了很多分析,但仍然没有找到任何解决方案。请帮我。

Answers:


181

您可以使用高级选项来运行Google测试。

要仅运行某些单元测试,可以使用--gtest_filter=Test_Cases1*命令行选项,其值应接受*?通配符以与多个测试匹配。我认为它将解决您的问题。

UPD:

好吧,问题是如何运行特定的测试用例。将gtest与您的GUI集成是另一回事,我不能真正评论,因为您没有提供有关方法的详细信息。但是,我相信以下方法可能是一个好的开始:

  1. 通过运行测试来获取所有测试用例 --gtest_list_tests
  2. 将此数据解析到您的GUI中
  3. 选择您要运行的测试用例
  4. 使用选项运行测试可执行文件 --gtest_filter

我建议这样做,如果您需要基于提示的系统,则建议创建一个包装脚本,以获取用户输入并相应地运行测试程序。
boycy,2012年

@nogard:是的,你是对的,但我的/我们的目标是有一个GUI,这将有TreeTestCasesTestNo。那么,您认为--gtest_filter=..会有所帮助吗?
Rasmi Ranjan Nayak 2012年

@nogard:非常感谢您的帮助...我会按照您的指示继续进行。.一旦完成,我会告诉您。
Rasmi Ranjan Nayak 2012年

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 2012年

@RasmiRanjanNayak:我建议根本不更改主要内容。我建议运行两次测试:第一次使用--gtest_list_tests运行,然后第二次使用--gtest_filter选项对选定的测试运行
nogard 2012年

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();

因此,感谢您提供所有答案。

你们真棒。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.