我为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); ?
答案 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'测试资源管理器: