我正在使用Google Test来测试我的C ++项目。但是,有些情况需要访问argc和argv来加载所需的数据。
在main()
方法中,初始化时,argc和argv被传递给测试的构造函数。
testing::InitGoogleTest(&argc, argv);
如何在测试后期访问它们?
TEST(SomeClass, myTest)
{
// Here I would need to have access to argc and argv
}
答案 0 :(得分:10)
我不知道谷歌的测试框架,所以可能有更好的方法来做到这一点,但这应该做:
//---------------------------------------------
// some_header.h
extern int my_argc;
extern char** my_argv;
// eof
//---------------------------------------------
//---------------------------------------------
// main.cpp
int my_argc;
char** my_argv;
int main(int argc, char** argv)
{
::testing::InitGoogleTest(&argc, argv);
my_argc = argc;
my_argv = argv;
return RUN_ALL_TESTS();
}
// eof
//---------------------------------------------
//---------------------------------------------
// test.cpp
#include "some_header.h"
TEST(SomeClass, myTest)
{
// Here you can access my_argc and my_argv
}
// eof
//---------------------------------------------
Globals并不漂亮,但是当你拥有的是一个不允许你将某些数据从main()
隧道传输到你拥有的任何测试函数的测试框架时,他们就能胜任。
答案 1 :(得分:1)
如果使用Visual Studio在Windows上运行,则可以在__argc和__argv中使用。
答案 2 :(得分:0)
测试可执行文件的命令行参数用于测试框架,而不是用于测试。通过它们,您可以设置--gtest_output
,--gtest_repeat
或--gtest_filter
等内容。测试首先应该是可再现的,如果它依赖于使用“正确”参数的人,则不是。
无论如何,你想要达到什么目标?