Я пишу модульный тест для SOAP API, в котором мне нужно смоделировать ответ определенного метода, который, однако, вызывается постоянно.
(соответствующий) код моего модульного теста следующий:
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
public class PricingSessionTest{
@Test
public void testPricingOfStrategyWithCorrectFormat() throws Exception {
//[...other code...]
PricingSessionImpl pricingSession = new PricingSessionImpl(this.session);
PricingSessionImpl spyPricingSession = Mockito.spy(pricingSession);
Mockito.doReturn(myResult)
.when(spyPricingSession)
.send(
Mockito.any(MxML.class),
Matchers.eq(ACTION_PRICE),
Matchers.eq(TimeoutDuration),
Matchers.eq(TimeoutUnit)
);
List<PricingResult<?>> pricedProducts = pricingSession.price(listOfProductsToPrice);
}
Внутри метода .price()
объекта-шпиона pricingSession
(тип PricingSessionImpl
) есть вызов следующего метода:
protected List<MxDocument> send(MxML mxml, String action, long timeout, TimeUnit timeoutUnit) throws RequestException, RequestTimeoutException
Реализация метода находится в родительском классе public abstract class AbstractPricingSession
(но сам метод не abstract
), вы можете найти иерархию ниже:
![enter image description here](https://i.stack.imgur.com/4EANz.png)
Когда я отлаживаю этот модульный тест, в какой-то момент я сталкиваюсь с вызовом метода, который хочу смоделировать:
List<MxDocument> documents = send(mxml, ACTION_PRICE, getTimeoutDuration(), getTimeoutUnit());
Здесь я бы ожидал, что мой Mockito
вернет мне myResult
, поскольку вызов метода send()
в классе PricingSessionImpl
выполняется с параметром типа MxML
, а затем с одним String
, один long
и один TimeUnit
, которые именно то, что я передаю на .when()
.
Однако метод продолжает вызываться.
Может кто-нибудь указать мне правильное направление для устранения этой проблемы? Обратите внимание, что я проверил несколько вопросов / ответов по этому вопросу, уже присутствующим в Интернете, но пока не нашел ничего полезного для моего конкретного случая.
Если вам нужно больше увидеть в коде, не стесняйтесь спрашивать.