2017-02-04 10 views
1

У меня есть метод ниже:Получение ошибки - InvalidUseOfMatchersException в Mockito

public Response getAbcExample(Double a, Double b, Integer c, String d, RequestHeader requestHeader) 
      throws Exception { 
     Map<String, String> logMap = new HashMap<>(); 
     Response response = new Response(); 
     String jsonString = _getAB_Exampe(a, b, c, requestHeader); 
    } 

Мой метод Mockito находится ниже

@Test 
public void getabc_Example_Success() throws IOException{ 
    Response response=new Response(); 
    RequestHeader requestHeaders=new RequestHeader(); 
    response.setMessage("Success"); 
    response.setStatusCode("200");   
when(abc.getabc_Example_Success(anyDouble(),anyDouble(),anyInt(),anyString(),requestHeaders)).thenReturn(response); 
     Mockito.verify(abc,Mockito.times(1)).getabcExable(Mockito.any(Double.class),Mockito.any(Double.class),Mockito.any(Integer.class),Mockito.eq(""),Mockito.any(RequestHeader.class));  
    } 

, но я получаю:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException.

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

+0

'requestHeaders' не подходит для вашего вызова' when'. Итак, сделайте то, что вам предлагает сообщение об исключении. – Tom

+0

Я пробовал ниже doNothing(). Когда (abc) .getAbcExample (Mockito.any (Double.class), Mockito.any (Double.class), Mockito.any (Integer.class), Mockito.eq (""), Mockito.any (RequestHeader.class)); но получение MockitoException и использование только метода void doNothing – Karthick

ответ

1

Я немного тест, основанный на коде и вот некоторые идеи ..

1) Вам не нужно использовать doReturn(). Если() .. синтаксис .. В вашем случае when(). thenReturn() в порядке (хотя вы по-прежнему можете придерживаться другой версии, вплоть до вас).

2) Не знаю, как вы экземпляр 'abc' объекта .. но он должен быть @Mock или @Spy, в противном случае вы не можете использовать, когда(). ThenReturn() функция на нем.

3) В, когда() .. Вы используете любой() в сочетании с реальным объектом без совпадений (объект в requstHeaders):

when(abc.getabc_Example_Success(anyDouble(),anyDouble() 
      ,anyInt(),anyString(),requestHeaders)); 

Вы не можете сделать это и Mockito будет выдавать ошибку:

This exception may occur if matchers are combined with raw values: 
    //incorrect: 
    someMethod(anyObject(), "raw String"); 
When using matchers, all arguments have to be provided by matchers. 
For example: 
    //correct: 
    someMethod(anyObject(), eq("String by matcher")); 

Вы должны сделать это либо Mockito.any(RequestHeaders.class) или Mockito.eq(requestHeaders)

Рабочий раствор

Так на основе выше тестового класса должен выглядеть более или менее похоже на следующее:

@Spy 
private Abc abc; 

    @Before 
    public void init(){ 
     MockitoAnnotations.initMocks(this); 
    } 

    @Test 
    public void tst() throws Exception{ 
     Response response= mock(Response.class); 
     RequestHeader requestHeaders=mock(RequestHeader.class); 
     when(a.getAbcExample(anyDouble(),anyDouble(),anyInt() 
     ,anyString(),Mockito.eq(requestHeaders))).thenReturn(response); 

     abc.getAbcExample(1.0, 1.0, 1, "", requestHeaders); // invoke the mocked method 

     verify(a, times(1)).getAbcExample(Mockito.any(Double.class) 
       ,Mockito.any(Double.class),Mockito.any(Integer.class) 
       ,Mockito.eq(""),Mockito.any(RequestHeader.class)); 


    } 
} 

В качестве альтернативы:

  • Вы можете использовать @Mock вместо @Spy
  • Последний параметр в verify .. Mockito.any(RequestHeader.class). Это может быть заменено на фактический объект requestHeaders и все еще будет работать.

Попробуйте.