【发布时间】:2018-10-03 07:44:44
【问题描述】:
假设我们有以下简单的示例代码:
public void doXYZ(UUID uuidA, UUID uuidB, UUID uuidC){
ObjectA objectA = objectAService.read(uuidA);
ObjectB objectB = objectBService.read(uuidB);
if(!doMatch(objectA, objectB)){
throw new ObjectsDoNotMatchException(objectA);
}
ObjectC objectC = objectCService.read(uuidC);
objectC.setObjects(objectA, objectB);
objectJobService.doWork(objectC);
}
并且会有一个测试用例测试并期望由于某些匹配问题而引发异常。
问题:Mock 前两个服务 + objectValidationService 是否足够,因为如果测试用例有效,则无论如何都无法访问所有其他服务?还是应该模拟 objectCService 和 objectJobService ,因为如果测试没有按预期工作,它们可以被调用并返回 NullPointerException ?
我经常问这种问题,如果这些方法不像所示的方法那么简单,而是有多个进一步的依赖关系,应该模拟这些依赖关系,因为要为完整路径生成有效状态可能需要做很多工作(即未在此测试用例中测试)用于早期故障用例。
编辑:让我们更具体一些。如果它们应该被模拟:不指定返回值(例如使用 when())并让它们失败就足够了,还是那些被模拟且通常不需要的服务也返回有效值?
【问题讨论】:
标签: java spring unit-testing