Spock测试框架:从隔离测试类到理解测试基础
隔离被测类
在进行系统的单元测试时,若使用Spock存根处理温度读取器,已能掌握其使用方法。但对于 ImprovedTemperatureMonitor 类,难以验证其反应,因为该类没有返回状态的方法,而是内部调用处理反应堆的外部库Java API。针对这个更复杂系统的单元测试,有以下三种选择:
1. 请求调试版本 :向生产反应堆控制Java API的公司索要“调试”版本,该版本不关闭反应堆,而是打印警告或日志信息。
2. 创建自定义实现 :创建 ReactorControl 的自定义实现来进行单元测试。但这与存根的反模式相同,会增加额外复杂性和维护负担,且 ReactorControl 是具体类而非接口,需额外的重构工作。
3. 使用模拟对象 :这是推荐的方法。
检查模拟对象的交互
Spock不仅支持存根,还提供内置的模拟支持。模拟对象是被测类的另一个虚假协作者,测试完成后,可检查模拟对象的交互情况。与存根不同,模拟对象能伪造输入/输出,测试完成后可进行检查。当被测类调用模拟对象时,测试框架(如Spock)会记录调用的特征,可据此判断是否符合预期。
以下是温度监控场景的示例代码:
def "If current temperature difference is more than 20 degr
超级会员免费看
订阅专栏 解锁全文
1607

被折叠的 条评论
为什么被折叠?



