Java - насмешливый вызов мыла с запросом SOAPMessage - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь смоделировать вызов мыла, который возвращает ноль в качестве ответа.

У меня есть класс java, где я звоню в веб-службы fedex, чтобы проверить проанализированный адрес. До сих пор все хорошо, но когда дело доходит до юнит-тестирования, возникает проблема. В тесте я пытаюсь смоделировать вызов мыла, передавая те же параметры запроса, которые передаются в реальном java-классе, но имитатор возвращает ответ как нулевой, поскольку запрос, который я передаю, не совпадает с запросом мыла ожидая в классе Java.

Код класса Java (abc.java) -

SOAPMessage payload = getAddressRequestPayload();
SOAPMessage responseMessage = soapConnection.call(payload, settings.addressUrl());

Тестовый код (junit4) -

SOAPMessage testResponse = getMockResponse();
SOAPMessage testPayload =  abc.getAddressRequestPayload();

when(mockSoapConnection.call(testPayload, settings.addressUrl())).thenReturn(testResponse);

Кроме того, я попытался получить полезную нагрузку запроса строки xml из класса java и добавить новую метку времени, используя fakeclock в тестовом классе, чтобы сопоставить обе полезные нагрузки, но, похоже, они разные. Один из способов - дать общий класс soapmessage, когда call like -

when(mockSoapConnection.call(any(SOAPMessage.class), anyString())).thenReturn(testResponse)

Тогда тест проходит, но это не правильный способ проверки конкретного вызова. Так как мне узнать разницу между полезными нагрузками или есть какой-то другой способ подделать мыльный вызов ??

Любая помощь приветствуется.

Саурабй

1 Ответ

0 голосов
/ 17 мая 2018

Если вы используете какой-либо подходящий фреймворк, такой как у Mockito, будьте осторожны, чтобы убедиться, что у вас действительно есть равенство в том, что вы настраиваете как ожидания.Если ваш класс SOAPMessage, например, не имеет метода equals, то макет не будет работать, если он не получит точно такой же экземпляр testPayload, который использовался в вашем тесте.Если вы создаете новый SOAPMessage в тестируемом классе, и нет метода equals, или метод equals возвращает «false», он не будет совпадать и не будет работать.

Как правило, если вы ищете сложную функциональность в макете, проще развернуть свой собственный класс как двойной тест .Начните с создания реализации интерфейса, который проверяет соответствующие параметры и возвращает ответ, если они присутствуют, и реорганизует его по мере добавления дополнительных требований.

Это может быть внутренний класс теста, нопоскольку он пересекает границу интеграции / модуля, вы, вероятно, обнаружите, что в другом месте он достаточно полезен, чтобы поместить его в собственную папку testHelpers или эквивалентную.

...