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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在多个单元测试中使用用户输入变量?相关的知识,希望对你有一定的参考价值。

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

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

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

另一答案

如果你正在使用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;
另一答案

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

以上是关于如何在多个单元测试中使用用户输入变量?的主要内容,如果未能解决你的问题,请参考以下文章

我如何对这样的代码进行单元测试?

如何创建片段以重复变量编号中的代码行

JMeter接口测试-Include控制器

如何使用 xcode 将快照划分为多个片段,以便让用户与每个片段进行交互?

如何使用输入对 Angular 指令进行单元测试?

Swift UI集合视图 - 如何在Cell中显示“segued”用户输入?