如何在多个单元测试中使用用户输入变量?
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
)并使用例如全局变量。
以上是关于如何在多个单元测试中使用用户输入变量?的主要内容,如果未能解决你的问题,请参考以下文章