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

问题描述 投票:3回答:3

我有一个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
    ...
}
c++ unit-testing global-variables googletest
3个回答
5
投票

首先,如果在多个测试函数中使用相同的值/参数,请考虑使用Fixtures。

你想要为我做什么看起来像一个“价值参数化测试”。我猜这在测试世界中相当普遍,而且--Tadaa,Google Test在其高级指南中有一章叫做"Value Parameterized Test"(哦,它使用灯具)。


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;

0
投票

你不能这样做,你需要自己解析命令行args(除了InitGoogleTest)并使用例如全局变量。

© www.soinside.com 2019 - 2024. All rights reserved.