我想开始学习/使用 C++ 中的单元测试。但是,我很难将测试的概念应用到我的编程领域。
我通常不会编写遵循预定义输入/输出模式的函数,相反,我的编程通常处于相当接近操作系统的水平。
一些示例包括:查找 Windows 版本、创建系统还原点、查询已安装驱动器的注册表、压缩文件或递归查找所有早于 X 天的 .log 文件。
我不知道如何将“结果”硬编码到测试功能中。在我的情况下甚至可以进行单元测试吗?
我想开始学习/使用 C++ 中的单元测试。但是,我很难将测试的概念应用到我的编程领域。
我通常不会编写遵循预定义输入/输出模式的函数,相反,我的编程通常处于相当接近操作系统的水平。
一些示例包括:查找 Windows 版本、创建系统还原点、查询已安装驱动器的注册表、压缩文件或递归查找所有早于 X 天的 .log 文件。
我不知道如何将“结果”硬编码到测试功能中。在我的情况下甚至可以进行单元测试吗?
“结果”不一定是 CONSTANT 值,它可能是代码发现的东西。例如,如果您正在压缩一个文件,则结果将是一个文件,在未压缩时会为您提供原始文件。因此,测试将采用现有的 test-file ,对其进行压缩,然后解压缩生成的压缩文件,然后比较两个文件。如果结果是“没有区别”,那就是通过了。如果文件不相同,则说明您遇到了某种问题。
相同的原则可以应用于您的任何其他方法。查找日志文件当然需要您准备许多文件,并给它们不同的时间(使用 theSetFileTime
或类似的)。
获取 Windows 版本应该为您提供您当前使用的 Windows 版本。
等等。
当然,您还应该尽可能进行“阴性”测试。如果您正在压缩一个文件,如果您尝试压缩一个不存在的文件会发生什么?如果磁盘已满怎么办(使用虚拟硬盘或类似的东西在这里会有所帮助,因为填满整个磁盘可能不会产生很好的效果!)。如果规范说代码应该以某种方式运行,那么验证它是否给出了正确的错误消息。否则,至少确保它不会“崩溃”,或者在没有某种错误消息的情况下失败。
您还可以使用一些模拟对象来伪造操作系统调用:
您可能有一个类操作系统,它具有模仿系统调用的方法。所以你的算法不直接调用全局 os 函数。
然后你可以构造一个假的 OS 类,它返回某种“硬编码”值用于测试。