我有一个C ++ 11项目,其中许多googletest单元测试看起来像
TEST_F(GTest, testSomething) {
int64_t n = 42;
// following code depends on input size n
...
}
我希望能够在一个位置(最好是命令行)设置输入大小,而不是在每个测试中都有一个局部常量n
:
./RunMyProgram --gtest_filter=* --n=1000
main
应如下所示:
int main(int argc, char **argv) {
// TODO: parse command line argument n here
INFO("=== starting unit tests ===");
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
我应该在测试函数中替换?
?
TEST_F(GTest, testSomething) {
int64_t n = ?;
// following code depends on input size n
...
}
答案 0 :(得分:5)
首先,如果您在多个测试函数中使用相同的值/参数,请考虑使用Fixtures。
您要为我做的事情看起来像是一个“值参数化测试”。我猜这在测试世界中很常见,并且--Tadaa,Google Test在其高级指南中有一章称为"Value Parameterized Test"(哦,它使用灯具)。
答案 1 :(得分:1)
如果您使用 gtest ,您也可以查看gflags。然后在main.cpp
中,您可以定义命令行参数:
DEFINE_int64(n, 0, "some input arg");
然后在您的测试代码中您可以声明它:
DECLARE_int64(n);
在你的测试中你会像这样使用它:
int64_t n = FLAGS_n;
当然,如果你想手动解析标志,那么你可以自己在main.cpp
中定义它:
int64_t FLAGS_n;
然后在测试文件中声明它:
extern int64_t FLAGS_n;
答案 2 :(得分:0)
你不能这样做,你需要自己解析命令行args(另外InitGoogleTest
)并使用例如{...}}提供你的值。全局变量。