假设我需要在两次迭代中在gtest中执行两个/多个不同的测试。 那么,如何进行相同的操作呢?我尝试了我的approch,但它失败了。 我写道,
::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:
,依此类推......
答案 0 :(得分:4)
我认为您无法使用::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在使用RUN_ALL_TESTS()
时如何计算GTEST_FLAG(repeat)
的返回值,但如果所有测试都通过,main
将返回0
,否则将返回RUN_ALL_TESTS()
调用的最后一个非零值。
答案 1 :(得分: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();
}