160

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

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 cases都使用 Test_F() 方法注册。所以,我做了很多分析,但仍然没有找到任何解决方案。请帮我。

4

3 回答 3

218

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

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

升级版:

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

  1. 通过运行测试获取所有测试用例--gtest_list_tests
  2. 将此数据解析到您的 GUI 中
  3. 选择你想要运行的测试用例
  4. 使用选项运行测试可执行文件--gtest_filter
于 2012-08-22T15:10:00.813 回答
116

总结 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();
}

有关可以使用的字符串语法的更多信息,请参阅运行测试子集部分。

于 2014-10-20T08:47:29.457 回答
31

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

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

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

Updated:-

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

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

所以,感谢所有的答案。

你们这些人很棒。

于 2012-08-23T12:27:37.990 回答