2010-02-26 5 views
19

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

Ex:

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

ответ

26

Я не совсем понимаю, в чем проблема, связанная с использованием 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).

+1

Я думаю, он действительно хочет вызвать myMethod(), поэтому ему нужно передавать все эти параметры каждый раз, когда раздувает тест. –

+0

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

3

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

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

+4

Истина - слишком много параметров на сигнатуре метода - это «запах» плохого кода. – SteveD

+0

У меня есть 5 параметров, и да, они нужны :) Это метод обслуживания, который я пытаюсь заглушить. Я только хотел быть теоретическим для методов, в которых вы действительно не хотите заглушить параметры. –

+0

Проблема с «миллионными» аргументами кажется очень распространенной проблемой для многих SOAP-сервисов. #fail – Kimble

10

использование 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))); 
Смежные вопросы