我必须修改以前编写的C ++代码,并且程序需要一些命令行参数。 其他人将进行审查,并将测试此代码,以减轻它们,我写了这个......
int main (int argc, char *argv[])
{
// To do testing just uncomment the below line.
#define TESTING
#ifdef TESTING
argc = ARGUMENT_COUNT;
argv[1] = new char[strlen(INPUT_FILE) + 1 ];
strcpy(argv[1], INPUT_FILE);
argv[2] = new char[strlen(MERGE_FILE) + 1 ];
strcpy(argv[2], MERGE_FILE);
.
.
.
#endif
我的问题:还有其他更好的方法来处理这种类型的测试,其中涉及命令行,并且在任何地方都使用相同的变量argv
。
注意:我没有IDE支持。我在远程服务器上使用vi编辑器。
答案 0 :(得分:2)
将处理命令行参数的代码放入一个单独的函数中,甚至可以放在存储值的类中的方法中,并将它们提供给应用程序。
然后,从main()
函数调用此函数/方法。最后,实现带有测试用例/函数的测试程序,测试用例/函数也用准备好的测试数据调用函数并检查预期结果。
这样,生产实现和测试明确分开,无需使用hack来提供测试数据等。
答案 1 :(得分:0)
C ++标准确实允许您更改argc
和argv
。不要忘记释放您使用new[]
分配的内存。
但更好的选择是通过IDE或启动脚本传递参数,而不是以这种方式破解代码。
请注意,从C ++中调用main
的行为(甚至间接地,即通过另一个函数)是 undefined 。因此,不要创建一个能够做到这一点的解决方案。
为了测试,我使用Boost中提供的套件。见www.boost.org。
答案 2 :(得分:0)
如果你的argv可以是const,你可以创建一个新的[Conditional("Awesome text")]
class MyClass
{
[ConditionField]
bool Initialized;
[Init]
void Init()
{
Initialized = true;
}
void Method1()
{
//do stuff;
}
}
并像这样替换原点。
argv
如果是测试建议,使用测试框架是更好的选择。
答案 3 :(得分:0)
首先,我会使用测试框架,但如果我要进行自己的测试,我可能会抽象命令行参数。创建一个解析和保存参数的类。使用依赖注入将argv或测试数据发送到构造函数。