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