Mockito: как легко заглушить метод без насмешки над всеми параметрами - PullRequest
20 голосов
/ 26 февраля 2010

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

Ex:

//Method to stub
public void myMethod(Bar bar, Foo foo, FooBar fooBar, BarFoo barFoo, .....endless list of parameters..);

Ответы [ 3 ]

27 голосов
/ 26 февраля 2010

Я не совсем понимаю, какие у вас проблемы с использованием Mockito. Предполагая, что вы создаете макет интерфейса, который содержит ваш метод myMethod(), вы можете затем проверить только параметры интересующего вас метода. Например (предполагая, что интерфейс называется MyInterface и используя JUnit 4):

@Test
public void test() {
    MyInterface myInterface = mock(MyInterface.class);
    FooBar expectedFooBar = new FooBar();        

    // other testing stuff

    verify(myInterface).myMethod(any(), any(), eq(expectedFooBar), any(), ...);
}

Вам нужно будет выполнить статический импорт методов Mockito, чтобы это работало. Для сопоставителя any() не важно, какое значение было передано при проверке.

Вы не можете избежать передачи чего-либо для каждого аргумента в вашем методе (даже если он только NULL).

10 голосов
/ 03 сентября 2013

используйте mockito.any

если myobj mymethod принимает строку, строку, строку, например

для ответа на звонок

Mockito.when(myojb.myMethod(Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class)))
    .thenReturn(amockedobject);

чтобы убедиться, что SteveD уже дал ответ

Mockito.verify(myojb).myMethod(
    Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class)));
3 голосов
/ 26 февраля 2010

Создайте класс-оболочку, который вызывает реальный метод и заполняет все аргументы, кроме тех, которые вы предоставляете (a.k.a «делегирование»).

И при следующей возможности подайте сообщение об ошибке в проект с просьбой переместить параметры в объект конфигурации.

...