Допустим, у нас есть следующий тривиальный пример кода:
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, так как все остальные сервисы в любом случае не будут доступны, если контрольный пример работает?Или должен ли объект CService, а также objectJobService также быть поддельным, поскольку они могут быть вызваны, и возвращать исключение NullPointerException, если тест не работает должным образом?
Я часто задаю вопрос такого рода, если методы не так тривиальны, как показанный метод, но вместо этого имеют несколько дополнительных зависимостей, которые следует смоделировать, поскольку для создания действительного состояния для полного пути может потребоваться немало усилий.(который не тестируется в этом тестовом примере) для ранних случаев отказа.
Редактировать: Давайте будем более конкретными.Если они должны быть проверены: достаточно ли этого, чтобы не указывать возвращаемое значение (например, с помощью when ()) и позволить им просто потерпеть неудачу, или эти проверенные и обычно не нужные службы также возвращают действительные значения?