java mockito matcher InvalidUseOfMatchersException - PullRequest
0 голосов
/ 23 февраля 2019

Я использую java spring boot и пытаюсь написать макет для AWS s3 bucket в моем unittest.Ниже приведен код, который вызывает некоторые проблемы при выполнении теста

    @Mock 
    AmazonS3 s3client;

    when(s3client.getObject(new GetObjectRequest(Mockito.any(String.class),
                    and(Mockito.any(String.class),Mockito.endsWith(".txt"))
                ))).thenReturn(RawText);

            when(s3client.getObject(new GetObjectRequest(Mockito.any(String.class),
                    and(Mockito.any(String.class),Mockito.endsWith(".png"))
                ))).thenReturn(RawImage);

. Я пытаюсь прочитать png-файл и текстовый файл из корзины S3.на основе типа содержимого я пытаюсь вернуть объект.Когда я выполняю тест, я получаю

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
1 matchers expected, 2 recorded:

Примечание. RawImage и RawText - S3Object, которые я создал.Можете ли вы помочь мне в этом, и что пошло не так в моем коде?

1 Ответ

0 голосов
/ 23 февраля 2019

В этом случае ожидается, что в качестве аргументов для getObject будут использоваться сопоставители.Поэтому вы можете захотеть реализовать пользовательское сопоставление, если ваш фактический аргумент не фиктивный:

org.hamcrest.Matcher<GetObjectRequest> objectRequestMatcher = 
         new BaseMatcher<GetObjectRequest>() {

    @Override
    public void describeTo(Description arg0) {
    }

    @Override
    public boolean matches(Object arg0) {
        return ((GetObjectRequest) arg0).getName().endsWith("txt"); //just an example
    }
};

А затем:

when(s3client.getObject(org.mockito.Matchers.argThat(objectRequestMatcher)))
    .thenReturn(RawText);
...