我使用方法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测试该类,基本上模拟UploadingProgressListener
,然后检查是否使用正确的百分比参数对其进行了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次。
我知道这里有Answers和ArgumentCaptors的概念,但是我认为至少算出模拟被调用的次数是正确的。感谢您的帮助。
答案 0 :(得分:1)
如果您确实要检查是否有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());