Как использовать два разных захватчика аргументов в одном методе тестирования? - PullRequest
0 голосов
/ 25 января 2019

У меня проблема с использованием захватчиков для проверки двух отдельных вызовов одного и того же метода, но с другим типом аргумента.

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

public class Foo {
}

public class Bar {
}

public interface MyClient {
  void doSomething(Object obj);
}

public class MyService {
    private MyClient client;

    void doSomething() {
        client.doSomething(new Foo());
        client.doSomething(new Bar());
    }
}

@RunWith(MockitoJUnitRunner.class)
public class MyServiceTest {

    @InjectMocks
    private MyService testObj;

    @Mock
    private MyClient myClient;

    @Captor
    private ArgumentCaptor<Foo> fooCaptor;

    @Captor
    private ArgumentCaptor<Bar> barCaptor;

    @Test
    public void testSomething() {
        testObj.doSomething();

        verify(myClient).doSomething(fooCaptor.capture());
        // ...do something with fooCaptor

        verify(myClient).doSomething(barCaptor.capture());
        // ...do something with barCaptor
    }
}

Я ожидаю, что этот тест пройдет как есть, потому что захватчики указывают типы аргументов, поэтому разве это не должно работать так же, как ArgumentMatchers.any(Foo.class) и т. Д.

В настоящее время яполучение TooManyActualInvocations - 2 вместо 1.

Как мы обрабатываем такие случаи?Мне не нравится идея использовать один захватчик, а затем использовать результаты.

1 Ответ

0 голосов
/ 27 января 2019

Попробуйте объединить захватчики с устройством сопоставления isA, используя оператор and из пакета AdditionalMatchers.

import static org.mockito.AdditionalMatchers.and;

// ...

verify(myClient).doSomething(and(isA(Foo.class), fooCaptor));
verify(myClient).doSomething(and(isA(Bar.class), barCaptor));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...