【问题标题】:How to run two different tests in Googletest如何在 Googletest 中运行两个不同的测试
【发布时间】:2012-08-27 10:54:45
【问题描述】:

假设我有两个/许多不同的测试需要在两次迭代中在 gtest 中进行。 那么,如何进行相同的操作呢?我尝试了我的方法,但失败了。 我写了,

::testing::GTEST_FLAG(repeat) = 2; //may be 2 or 3 or so on...
switch(i) //int i = 1;
{
case 1:
::testing::GTEST_FLAG(filter) = "*first*:*second*";
i++; break;
case 2:
::testing::GTEST_FLAG(filter) = "*third*:*fourth*";
i++; break;
and so on............

但是 Google 测试只使用了 "*first*:*second*" 并运行了两次。 请帮我。我的要求是 Gtest 应该一个一个地运行所有的测试用例。 例如首先它将执行case 1: 然后case 2: 等等......

【问题讨论】:

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


    【解决方案1】:

    我认为你不能使用 ::testing::GTEST_FLAG(repeat) 来做到这一点

    但是,您可以通过以下方式实现目标:

    #include "gtest/gtest.h"
    
    int RunTests(int iteration) {
      switch(iteration) {
        case 1:  ::testing::GTEST_FLAG(filter) = "*first*:*second*"; break;
        case 2:  ::testing::GTEST_FLAG(filter) = "*third*:*fourth*"; break;
        default: ::testing::GTEST_FLAG(filter) = "*";
      }
      return RUN_ALL_TESTS();
    }
    
    int main(int argc, char **argv) {
      ::testing::InitGoogleTest(&argc, argv);
      int final_result(0);
      for (int i(0); i < 3; ++i) {
        int result(RunTests(i));
        if (result != 0)
          final_result = result;
      }
      return final_result;
    }
    

    我不确定gtest在使用GTEST_FLAG(repeat)时如何计算RUN_ALL_TESTS()的返回值,但这里main会在所有测试通过时返回0,否则返回最后一个非零值RUN_ALL_TESTS() 调用次数。

    【讨论】:

    • :- 感谢您的大力帮助。但是当control 看到InitGoogletest 没有任何preconditions(如过滤器)时,它开始运行所有测试用例,然后进入过滤的测试用例。我找到了解决方案。请看下面。
    • @RasmiRanjanNayak 很高兴您得到了解决方案。尽管InitGoogleTest 并没有完全按照您的想法行事。它仅在您第一次调用时才有效 - 所有后续调用都是无操作的。您可以安全地将其移至答案中的 for 循环之前。在我的回答中,您第一次没有过滤器,因为我从 0 而不是 1 开始循环,并且没有case 0,所以它使用default 的情况,即"*"
    • :-是的,你是对的。我在for 循环之前做了同样的事情,把InitGoogleTest 放在了前面,一切都很好。但是有一个问题,将InitGoogleTest 保持在for 循环内部和之前有什么区别(除了init-ing GoogleTest 多次直到条件失败)?
    • @RasmiRanjanNayak 拨打InitGoogleTest 多少次都没有问题。它只会在你第一次调用它时“做”一些事情。之后的每一次,它所做的只是检查它之前是否被调用过,如果是则立即返回而不做任何进一步的事情。
    【解决方案2】:
    int main(int argc, char **argv) {
        int i = 1;
            vector<string> str;
            str.push_back("*first*:*second*");
            str.push_back("*third*:*fourth*");
            str.push_back("*fifth.fifthtestname*");
            for(i = 0; i != str.size(); i++)
            {
                ::testing::GTEST_FLAG(filter) = str.at(i);
                 InitGoogleTest(&argc, argv);
                 RUN_ALL_TESTS();
                // getchar();
            }
            getchar();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      相关资源
      最近更新 更多