2015-08-14 2 views
-3

Мой тестовый класс:проверка вызова метода не удается в единичном испытании

@Before 
    public void init() { 
    arg2= mock(Dispatcher.class); 
    target = new FileHandlerImpl(Dispatcher, service , channel, scope); 
    } 

    @Test 
    public void shouldVerifyCalls() throws Exception { 
    final String arg1 = "Some arg 1"; 
    final String arg3 = "Some arg 3"; 
    final String arg4 = "Some arg 4"; 
    target.handleMessage(message, endpointSession); 
    verify(arg2).send(arg1, arg2, arg3, arg4); //here is error 
} 

Error Log:

Argument(s) are different! Wanted: 
Dispatcher.send(
    "179fb6c5-9e47-41cc-9903-d0df5a317f55", 
    Mock for Dispatcher, hashCode: 992040402, 
    null, 
    null 
); 
-> at com.TestApp.FileHandlerTest.shouldVerifyCalls(FileHandlerTest.java:77) 
Actual invocation has different arguments: 
Dispatcher.send(
    "d6723004-45aa-4958-8a8e-595a01056c82", 
    Dispatcher{id=100, serial='null', sentTime=1, priority=99}, 
    null, 
    null 
); 
+0

Что ваш вопрос? Ошибка Mockito точно говорит вам, что происходит. –

+0

Я знаю о ошибке mockito, что «аргументы разные». Но я просто хочу проверить, вызывается ли метод 'send' один раз или нет, независимо от аргументов. –

+0

Вызывается метод 'send'. В противном случае Мокито сказал бы что-то вроде «Wanted, но не вызвал». Вы можете создать простой пример и посмотреть его поведение. –

ответ

0

Вы должны использовать Mockito-х Matchers добиться того, что вам хотеть. Я считаю, что этот пример будет уточнить понятие:

import static org.mockito.Matchers.any; 
import static org.mockito.Matchers.anyString; 
import static org.mockito.Mockito.mock; 
import static org.mockito.Mockito.verify; 

... 

List<String> mockedList = mock(List.class); 
mockedList.add("test"); 

// this won't fail the test because the parameters match 
verify(mockedList).add("test"); 

// this will fail the test because Mockito verifies the parameters and they don't match 
verify(mockedList).add("other string"); 

// on the other hand, if you don't care about the parameters, you can use Matchers 
verify(mockedList).add(anyString()); 
// or more generically 
verify(mockedList).add(any(String.class)); 

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

import static org.mockito.Mockito.times; 
... 
verify(mockedList, times(1)).add(anyString()); 
+0

Но один из аргументов моего метода не является 'string type', поэтому' anyString() 'не будет приниматься как его аргумент. Это тип 'Dispatcher', где' Dispatcher' является классом. Как передать это как аргумент? –

+0

Вот почему я также представил общий способ сделать это. В вашем случае это будет что-то вроде: 'verify (yourMock) .send (any (Dispatcher.class))' –

+0

Нет совпадения с именем 'any'. Я получаю ошибку времени компиляции, когда я ее использую. В какой версии она была введена? –

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