假设我们有以下简单的示例代码:
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);
}
将会有一个测试用例,它测试并期望由于某些匹配问题而引发异常。
问题:模拟前两个服务+ objectValidationService是否足够,因为如果测试用例可行,则所有其他服务都无法访问?还是应该模拟objectCService以及objectJobService,因为它们可能会被调用,并且如果测试无法按预期进行,则返回NullPointerException?
我经常问这样的问题,这些方法是否不如所示方法那么琐碎,而是具有多个其他依赖关系,应该对其进行模拟,因为要为完整路径生成有效状态可能是很多工作(不在早期测试中)。
编辑:让我们更具体一些。如果应该对它们进行嘲笑:是否不指定返回值(例如使用when())并让它们失败就足够了吗?或者那些被嘲笑且通常不需要的服务也应该返回有效值?
答案 0 :(得分:0)
是:应该嘲笑所有服务。
您要确保当对象A和对象B不匹配时,与objectCService
和objectJobService
没有交互。