分配参数用于测试目的
Assigning argv for testing purpose
我必须修改以前编写的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 编辑器。
将处理命令行参数的代码放入单独的函数中,甚至可以放在存储值并将其提供给应用程序的类中的方法中。
然后,从main()
函数调用此函数/方法。最后,使用测试用例/函数实现测试程序,这些测试用例/函数也使用准备好的测试数据调用函数并检查预期结果。
这样,生产实施和测试是明确分离的,无需使用黑客来提供测试数据等。
如果你的 argv 可以是 const,你可以创建一个新的argv
并像这样替换源。
int main (int argc, const char *argv[])
{
// To do testing just uncomment the below line.
#define TESTING
#ifdef TESTING
const char* args[]={
"arg 1","arg 2","arg 3",nullptr
};
argc = sizeof(args)/sizeof(char*);
argv = args;
#endif
}
如果是测试建议,使用测试框架是更好的选择。
C++标准确实允许您更改argc
和argv
。不过,不要忘记释放您分配的内存new[]
。
但更好的选择是通过 IDE 或启动脚本传递参数,而不是以这种方式破解代码。
请注意,从自身调用main
的行为(即使是间接的;即通过另一个函数)在C++中是未定义的。因此,不要创建执行此操作的解决方案。
为了进行测试,我使用 Boost 中提供的套件。请参阅 www.boost.org。
首先,我会使用一个测试框架,但如果我要进行自己的测试,我可能会抽象命令行参数。创建一个分析和保存参数的类。使用依赖关系注入将 argv 或测试数据发送到构造函数。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 用于交叉编译和CMake的预处理器宏的单元测试
- 更正 CMakeList.txt 用于谷歌测试的文件?
- C++ 用于单元测试的模板模板
- std::is_invocable 用于测试任意方法是否存在的语法(不仅是运算符())
- 存根用于STM32单元测试的HAL库
- 米勒-拉宾测试不适用于252097800623
- 用于查找连续子数组的最大总和的代码使测试用例失败
- 查找不适用于 c++ 中特定测试用例的最长子字符串
- 生成用于测试的随机结构的通用方法
- 用于 JUnit 测试的本机代码未使用 'nar-maven-plugin' 编译
- 用于测试目的:"special"哪些浮点数(IEEE754 32b)?
- 如何使用于 catch2 测试和项目运行的 cmake 目标更具可扩展性和合理性?
- 替换(或重新实现?)std::函数用于某些统计和测试
- C 程序,用于分级多个True或False测试
- 为了在测试中调用destuructor(用于测试),静态铸造基类有多么可怕
- 分配参数用于测试目的
- VCPKG不适用于Google测试
- 一些测试用于查看为使用指针的迭代和使用索引的迭代生成的代码是否不同