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
    ...
}
4

3 回答 3

5

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

您要为我做的事情看起来像是“值参数化测试”。我想这在测试世界中相当普遍,而且 - tadaa,谷歌测试在其高级指南中有一个章节,称为“值参数化测试”(哦,它使用固定装置)。

于 2013-01-16T14:55:21.393 回答
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;
于 2013-01-16T14:58:17.473 回答
0

你不能那样做,你需要自己解析命令行参数(除了InitGoogleTest)并使用例如全局变量提供你的值。

于 2013-01-16T14:45:23.310 回答