Использование java SAP Cloud SDK
Я пытаюсь написать модульные тесты для пользовательского класса, назовем его OutboundDeliveryUpdater
, который зависит от com.sap.cloud.sdk.s4hana.datamodel.odata.namespaces.outbounddeliveryv2.batch.OutboundDeliveryV2ServiceBatch
( это поле класса). Требуется обновить несколько элементов исходящей доставки в системе S4. Метод в OutboundDeliveryUpdater
, который выполняет обновление, выглядит следующим образом (для краткости опущена обработка исключений):
OutboundDeliveryV2ServiceBatchChangeSet changeSet = outboundDeliveryService.beginChangeSet();
itemsForUpdation.forEach(changeSet::updateOutbDeliveryItem);
changeSet.endChangeSet();
BatchResponse batchResponse = outboundDeliveryService.execute(destination);
boolean isUpdateSuccessful = batchResponse.get(0).isSuccess();
Теперь проблема заключается в том, что при написании модульного теста для вышеприведенного кода необходимо проверять следующие вещи :
outboundDeliveryService.beginChangeSet()
и outboundDeliveryService.execute(destination)
destination
, который является экземпляром HttpDestination changeSet.updateOutbDeliveryItem()
batchResponse.get()
Это делает модульное тестирование очень сложным. Мы должны смоделировать реальную зависимость (outboundDeliveryService
) и объекты, возвращаемые методами, которые выполняются на этой зависимости (changeSet
, batchResponse
). Кажется, это классическое c нарушение Закона Деметры , и код демонстрирует недостаток копания в соавторах , и именно поэтому становится трудно писать модульные тесты для этого кода.
Есть ли лучший способ написания:
- Модульные тесты для этого кода, чтобы предотвратить всю эту сложность?
- Если нет, то есть ли лучший способ проектирования
OutboundDeliveryUpdater
, чтобы проблема была решена? Например, OutboundDeliveryUpdater
может зависеть от нового класса, скажем, SomeService
, который действует как фасад и скрывает сложность OutboundDeliveryV2ServiceBatchChangeSet
. Но это снова сместит сложность тестирования с модульного теста OutboundDeliveryUpdater
на тест SomeService
.