我正在为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),您可以在下面找到层次结构:

java - Mockito.doReturn()。when()不起作用-单元测试不断调用原始方法-LMLPHP

当我调试此单元测试时,有时会遇到对我要模拟的方法的调用:
List<MxDocument> documents = send(mxml, ACTION_PRICE, getTimeoutDuration(), getTimeoutUnit());

在这里,我希望自己的Mockito返回myResult,因为对send()类中的PricingSessionImpl方法的调用是使用MxML类型的参数完成的,然后是一个String,一个long和一个TimeUnit,这些正是我所传递的到.when()

但是,该方法不断被调用。

谁能指出我要调试此问题的正确方向?请注意,我已经检查了网络上已经存在的有关此主题的多个问题/答案,但是到目前为止,没有发现对我的具体情况有用的任何信息。
如果您需要在代码中查看更多内容,请随时询问。

最佳答案

为了实际使用间谍,对price(listOfProductsToPrice)的调用需要转到实例spyPricingSession上的间谍

List<PricingResult<?>> pricedProducts = spyPricingSession.price(listOfProductsToPrice);

07-26 03:27