如何在 Googletest 中运行两个不同的测试
Posted
技术标签:
【中文标题】如何在 Googletest 中运行两个不同的测试【英文标题】:How to run two different tests in 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:
等等......
【问题讨论】:
【参考方案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();
【讨论】:
以上是关于如何在 Googletest 中运行两个不同的测试的主要内容,如果未能解决你的问题,请参考以下文章