如何在Googletest中运行两个不同的测试

How to run two different tests in Googletest

本文关键字:两个 测试 Googletest 运行      更新时间:2023-10-16

假设我有两个/多个不同的测试需要在两次迭代中在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............

但谷歌测试只采用"*first*:*second*",运行两次。请帮帮我。我的要求是Gtest应该逐一运行所有的测试用例。例如,首先它将执行case 1:,然后执行case 2:,依此类推…

我认为使用::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_FLAG(repeat)时,gtest是如何计算RUN_ALL_TESTS()的返回值的,但这里main将在所有测试都通过的情况下返回0,否则它将返回RUN_ALL_TESTS()调用的最后一个非零值。

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