3

I've configured visual studio for google test. Then I've written some simple google test cases in vs2010, as You can see below:

TEST(simpleTest, test1){
    float base = 4.f;
    float exponent = 1.f;
    float expectedValue = 4.f;
    float actualValue = pow(base, exponent);
    EXPECT_FLOAT_EQ(expectedValue, actualValue);
}
TEST(simpleTest, test2){
    float base = 4.f;
    float exponent = 2.f;
    float expectedValue = 16.f;
    float actualValue = pow(base, exponent);
    EXPECT_FLOAT_EQ(expectedValue, actualValue);
}
int main(int argc, char **argv) {
  ::testing::InitGoogleTest(&argc, argv);
  RUN_ALL_TESTS();
}

My question is how to run not all (RUN_ALL_TESTS) the tests but one specific test case? Is there any macro e.g. RUN(simpleTest.test1); ?

4

3 回答 3

10

如果需要,您可以使用GTEST_FLAG宏将命令行标志编译到您的测试可执行文件中(请参阅运行测试程序:高级选项

因此,例如,在您的情况下,您可以这样做:

int main(int argc, char **argv) {
  ::testing::GTEST_FLAG(filter) = "simpleTest.test1";
  ::testing::InitGoogleTest(&argc, argv);
  RUN_ALL_TESTS();
}

然而,像这样的硬编码测试过滤器通常是不可取的,因为每次想要更改过滤器时都需要重新编译。

至于在运行时通过 Visual Studio 传递标志,我猜您知道您可以--gtest_filter=simpleTest.test1在目标属性页的“调试”选项中添加命令参数?

于 2013-11-05T23:05:37.623 回答
3

没有指定单个测试的宏。只有 RUN_ALL_TESTS。

我认为这是设计使然,因为运行所有测试通常更可取。但是,如果您想将其放入代码中,只需像这样伪造命令行参数:

const char *testv[2]=
{
    "gtest",
    "--gtest_filter=simpleTest.test1",
};
int testc=2;

::testing::InitGoogleTest(&testc, (char**)testv);
int result = RUN_ALL_TESTS();
于 2013-11-05T22:16:46.377 回答
0

我还没有真正理解您是否确实要对单个测试进行硬编码,或者您是否想在测试执行时决定应该运行哪个单个测试。如果后者是您想要的,您可以利用这些 VS 扩展将您的测试集成到 VS 的测试资源管理器中:

于 2017-07-20T17:43:13.910 回答