如何跨多个单元测试使用用户输入变量
How to use a user input variable across multiple unit tests?
我有一个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
...
}
首先,如果您在多个测试函数中使用相同的值/参数,请考虑使用fixture。
你想为我做的看起来像一个"值参数化测试"。我想这在测试界是很常见的,而且,谷歌测试在其高级指南中有一章叫做"值参数化测试"(哦,它使用了fixture)。
如果您正在使用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;
你不能这样做,你需要自己解析命令行参数(除了InitGoogleTest
),并使用全局变量提供你的值。
相关文章:
- C++如何通过用户输入删除列表元素
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 在C++中,我如何接受不同于同一行的用户输入
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 显示基于用户输入的整数的字符
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 打印时有二叉树问题.用户输入不打印任何内容
- C ++奇怪的数组由用户输入
- 如何允许大写和小写用户输入?
- C++读取用户输入而不按回车键(Mac OS X),与Turbo Pascal中的读取键相同
- 如何存储用户输入的所有数据,然后在他们想要查看所有数据时显示它们
- 如何使用用户输入变量制作二维数组?
- 用户输入字符串的文件附加问题..C++
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 如何使用递归循环我的代码(当用户输入无效输入时,它会再次提示他们)?