我正在为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
),您可以在下面找到层次结构:当我调试此单元测试时,有时会遇到对我要模拟的方法的调用:
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);