如何在visual studio中运行单个google测试?

时间:2013-11-05 21:00:55

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

我为google测试配置了visual studio。然后我在vs2010中写了一些简单的谷歌测试用例,如下所示:

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

我的问题是如何运行并非所有(RUN_ALL_TESTS)测试,而是一个特定的测试用例?有没有宏,例如RUN(simpleTest.test1); ?

3 个答案:

答案 0 :(得分:9)

如果需要,可以使用GTEST_FLAG宏将命令行标记编译到测试可执行文件中(参见Running Test Programs: Advanced Options

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

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添加到命令参数中吗?

答案 1 :(得分: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();

答案 2 :(得分:0)

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