我正在尝试模拟一个 SOAP Interceptor 类,其中一个类方法返回一个 Iterator 对象。但是,在仔细检查语法后,迭代器并没有被真正的迭代器替换,Mockito 继续运行没有真正迭代器的方法。
我尝试使用各种模拟方法(doReturn,when...thenReturn)模拟拦截器的返回值,但这些方法都没有奏效。我不确定我在嘲笑中的错误在哪里。
这是我在测试类中模拟当前对象的方式:
@Mock private WebServiceTemplate template;
@Mock private SoapInterceptor interceptor;
@Mock private Iterator<Attachment> iterator;
@Test
public void testGetDocsSoapClient() {
@SuppressWarnings("unchecked")
Iterator<Attachment> realIterator = new ArrayListIterator();
ObjectFactory realFactory = new ObjectFactory();
assertFalse(realIterator.hasNext());
doReturn(realFactory.createAwsGetDocsRequest(createMockAwsGetDocsReq()))
.when(factory).createAwsGetDocsRequest(any (AwsGetDocsRequest.class));
doReturn(realFactory.createAwsGetDocsResponse(createAwsGetDocsResponse()))
.when(template).marshalSendAndReceive(any(Object.class), any(SoapActionCallback.class));
doReturn(realIterator)
.when(interceptor).getSoapAttachments();
这是在真实类中调用该方法的方式。
Iterator<Attachment> soapAttachments = attachmentInterceptor.getSoapAttachments();
ImageListDVO imgList = convertToImageList(soapAttachments);
...我的测试用例在这个私有方法的最后一行失败了。
private ImageListDVO convertToImageList(Iterator<Attachment> attachments) {
ImageListDVO imgList = new ImageListDVO();
while(attachments.hasNext()) {
我应该正确地模拟对象,但我得到一个 NullPointerException,这表明该对象没有被模拟或正确注入。