Интерфейс обратного вызова Mockito - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть очень простой сервис с методом 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, в основном mock 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 раз.

Я знаю, что есть концепция «Ответы» и «АргументКапторы», но я подумал, что, по крайней мере, подсчет того, сколько раз был вызван макет, будет правильным.Спасибо за любую помощь.

1 Ответ

0 голосов
/ 24 ноября 2018

Если вы действительно хотите проверить, что была упорядоченная последовательность из 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...