Mockito正在嘲笑回调接口



我有一个非常基本的服务,方法post通过回调接口更新它的进度。

public class HttpPostService {
public interface UploadingProgressListener {
void onProgress(int progress);
}
public int post(InputStream body, UploadingProgressListener listener)
{
// shortened for brevity
// read inputstream and writes bytes to HttpURLConnection outputstream
// read inputstream in loop notify listener about progress
listener.onProgress(percentage);
}
}

我想用Mockito测试这个类,基本上是mockUploadingProgressListener,然后检查它是否用正确的百分比参数进行了n次调用。

@Test
public void testPostFileProgressListener() throws IOException {
UploadingProgressListener mockListener = mock(UploadingProgressListener.class);
InputStream inputStream = new ByteArrayInputStream();
service.postFile(inputStream, mockListener);
verify(mockListener, times(5)).onProgress(100);
}

然而,当我运行测试时,它说它只被调用了一次,但当我调试它时,监听器被调用了5次。

我知道有答案和论据标题的概念,但我认为至少计算mock被调用的次数是正确的。谢谢你的帮助。

如果您确实想检查是否有一个由5个调用组成的有序序列,参数为20、40、60、80和100,那么您只需要

InOrder inOrder = inOrder(mockListener);
inOrder.verify(mockListener).onProgress(20);
inOrder.verify(mockListener).onProgress(40);
inOrder.verify(mockListener).onProgress(60);
inOrder.verify(mockListener).onProgress(80);
inOrder.verify(mockListener).onProgress(100);

如果你只想检查监听器是否被调用了5次,而不关心参数,那么只需使用

verify(mockListener, times(5)).onProgress(anyInt());

最新更新