如何在GoogleTest中运行特定的测试用例

Ras*_*yak 107 c++ googletest visual-studio-2010

我正在尝试为我的项目编写一个函数/方法,它将向用户询问您要运行的所有测试用例?它看起来像......

Test_Cases_1
         |_TestNo1
         |_TestNo2....so on
Test_Cases_2
         |_TestNo1
         |_TestNo2....so on
....
....so on
Test_Cases_N
         |_TestNo1
         |_TestNo2....so on
Run Code Online (Sandbox Code Playgroud)

那么,现在的挑战是在运行项目时它应该提示我想要执行的所有测试用例?如果我选择Test_Cases_1Test_Cases_N.然后它应该执行这两个测试用例,并应排除所有其他测试用例Test_Cases_2 to .....在结果窗口也是我希望看到的结果Test_Cases_1Test_Cases_N.

所以,如果我看到GoogleTest,就会有一个方法叫做test_case_to_run_count(); 但是所有的test cases都是通过Test_F()方法注册的.所以,我做了很多分析,但仍未找到任何解决方案.请帮我.

nog*_*ard 164

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

要仅运行某些单元测试,可以使用--gtest_filter=Test_Cases1*带有正则表达式值的命令行选项.我认为它会解决你的问题.

UPD:

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

  1. 通过运行测试获取所有测试用例 *
  2. 将此数据解析到GUI中
  3. 选择您想要运行的测试用例
  4. 使用选项运行test executable ?


Jor*_*tao 81

总结@Rasmi Ranjan Nayak和@nogard回答并添加另一个选项:

在控制台上

你应该使用旗帜--gtest_filter,比如

--gtest_filter=Test_Cases1*
Run Code Online (Sandbox Code Playgroud)

(您也可以在"属性"|"配置属性"|"调试"|"命令参数"中执行此操作)

关于环境

你应该设置变量GTEST_FILTER一样

export GTEST_FILTER = "Test_Cases1*"
Run Code Online (Sandbox Code Playgroud)

在代码上

你应该设置一个标志filter,比如

::testing::GTEST_FLAG(filter) = "Test_Cases1*";
Run Code Online (Sandbox Code Playgroud)

这样你的主要功能变成了类似的东西

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

有关可以使用的字符串语法的详细信息,请参阅运行测试子集一节.

  • 非常有用的部分"在代码上"!! 这就是我要找的!! (6认同)

Ras*_*yak 26

最后我得到了一些答案, ::test::GTEST_FLAG(list_tests) = true;//来自你的程序,而不是wrt控制台.

如果您想使用--gtest_filter =*; /* =*, =xyz*... etc*///您需要在Console中使用它们.

所以,我的要求是从程序而不是从控制台使用它们.

Updated:-

最后,我得到了从程序中更新相同内容的答案.

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

所以,谢谢你的所有答案.

你们人很棒.