如何在多个单元测试中使用用户输入变量?

时间:2013-01-16 14:37:01

标签: c++ unit-testing global-variables googletest

我有一个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
    ...
}

3 个答案:

答案 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)并使用例如{...}}提供你的值。全局变量。