2016-08-28 3 views
1

Я пытаюсь написать модульный тест в java. Ниже фрагмент моего кодаmockito partial parmaters mocking

класс Temp { общественного недействительными метод() {

 return someObject.someMethod(param1, param2, param3, param4, param5); 
    } 
} 

Метод испытания:

@Test 
public void testMethod() { 

    Mokito.when(someObjectMock.someMethod(Mockito.anyString(), Mockito.anyString(), Mockito.anyInt(), Mockito.anyBoolean(), 
        false)). thenReturn(true); 

    boolean status = temp.method(); 

    Assert.assertEquals(true, status); 
} 

На выполнение тестового примера, я однако получаю ниже ошибки:

Invalid Use of argument matchers ! 
5 matchers expected, 4 recorded 

Если мое понимание верное, ожидается, что все параметры чтобы их издевались. Однако это не то, что я хочу, я хочу издеваться над первыми 4 параметрами и на основе параметра 5 (true или false), тогда будет указано соответствующее возвращаемое значение метода.

Есть ли способ обойти это?

Благодаря

ответ

2

Вы должны использовать Matchers.eq(false) (или Mockito.eq(false), одни и те же статические методы подвергаются в обоих местах), а не простой false для последнего параметра.

Это означает, что оставлять все сошники в вашем обрусе (when() звонки) как any(), а не ожидать значения. Здесь есть два случая: либо ваш тест действительно заботится о том, какие значения передаются в макет, и в этом случае вам нужен звонок verify() (поскольку пропущенное макетное ожидание не является ошибкой в ​​Mockito), иначе ваш тест не волнует , и в этом случае ожидая определенного значения просто делает ваш тест хрупким. В любом случае, нет никакой ценности в ожидании конкретных аргументов во время stubbing, если вам не нужно возвращать разные значения из заглушки на основе разных значений аргументов.

Смежные вопросы