我正在为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()
的东西。
但是,该方法不断被调用。
有人能指出我要调试此问题的正确方向吗?请注意,我已经检查了网络上已经存在的有关此主题的多个问题/答案,但是到目前为止,没有发现对我的具体情况有用的信息。
如果您需要在代码中查看更多内容,请随时询问。
答案 0 :(得分:4)
要真正使用间谍,对price(listOfProductsToPrice)
的调用需要转到实例spyPricingSession
上的间谍
List<PricingResult<?>> pricedProducts = spyPricingSession.price(listOfProductsToPrice);