【问题标题】:How to run specific test cases in GoogleTest如何在 GoogleTest 中运行特定的测试用例
【发布时间】:2012-08-22 15:04:30
【问题描述】:

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

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

【问题讨论】:

    标签: c++ visual-studio-2010 googletest


    【解决方案1】:

    您可以使用 advanced options 运行 Google 测试。

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

    更新:

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

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

    【讨论】:

    • 我推荐这个,如果你需要一个基于提示的系统,那么我建议创建一个包装脚本来获取用户输入并相应地运行测试程序。
    • @nogard:是的,你是对的,但我/我们的目标是拥有一个 GUI,它将具有 TestCasesTestNoTree。那么,您认为--gtest_filter=.. 会有所帮助吗?
    • @nogard:非常感谢您的帮助...我会按照您的指示继续进行...完成后我会通知您。
    • @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。但它不运行测试。那么,我现在如何运行测试呢?
    • @RasmiRanjanNayak:我建议根本不要更改主要内容。我建议运行两次测试:第一次使用 --gtest_list_tests 运行,然后第二次使用选项 --gtest_filter 运行所选测试
    【解决方案2】:

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

    在控制台上

    你应该使用标志--gtest_filter,比如

    --gtest_filter=Test_Cases1*
    

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

    关于环境

    你应该设置变量GTEST_FILTERlike

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

    有关您可以使用的字符串语法的更多信息,请参阅Running a Subset of the Tests 部分。

    【讨论】:

    • “关于代码”的部分非常有用!!这就是我要找的!
    • 那个链接 404s。添加标志的控制台命令是什么?
    • @BigMoney 如果您仍然感兴趣,我已经更新了链接。无论如何,控制台命令只是对应于您的单元测试的可执行文件的名称。此处指示的字符串是命令行参数,必须在其后添加。
    【解决方案3】:

    终于有答案了 ::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();
    

    所以,谢谢大家的回答。

    你们太棒了。

    【讨论】:

    • 非常有用,但看起来 InitGoogleTest( ) 应该在设置 GTEST_FLAG 之前出现。正确的?我尝试了@jorge 下面给出的“总结”答案,它似乎对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2015-11-27
    • 2018-07-08
    • 1970-01-01
    相关资源
    最近更新 更多