Использование mockito для имитации ответа от метода, который возвращает ByteBuffer - PullRequest
0 голосов
/ 14 февраля 2020

Я пишу тест junit для метода, внутри которого я вызываю метод, который возвращает ByteBuffer. Я пытаюсь смоделировать вызов метода, но байтовый буфер все еще выбрасывает исключение нулевого указателя. Это мой самый первый раз, когда я пишу тесты Junit с использованием mockito.

Моя функция-

public void myfunc(){
CallMyClass cl=new CallMyClass();
// getBody() return ByteByffer
final byte[] response = cl.getBody().array();
}

Test-

@Mock
CallMyClass cl;
public void test_myfunc(){
when(this.cl.getBody().array()).thenReturn("fddf".getBytes())
}

Я продолжаю получать исключение нулевого указателя на cl .getBody (). array () строка кода.

1 Ответ

1 голос
/ 14 февраля 2020

Я подозреваю, что вы неправильно понимаете, как работает издевательство.

Стандартный формат макета when(mock.method(argumentMatchers)).thenReturn(...). Таким образом, в вашем случае макет объекта должен быть возвращен cl.getBody() для работы when. Но ясно, что это не то, что произойдет, если вы не высмеяли возвращение cl.getBody().

На самом деле ваш myfunc даже не прошел CallMyClass; скорее это создает один. Так что на самом деле нет способа высмеять его возвращение.

Стандартный тестируемый формат вашего примера:

public void myfunc(CallMyClass cl) {
   final byte[] response = cl.getBody().array();
   ...
}

@Test
void testMyFunc() {
    CallMyClass cl = mock(CallMyClass.class);
    ByteBuffer buf = mock(ByteBuffer.class);
    when(cl.getBody()).thenReturn(buf);
    when(buf.array()).thenReturn("fdafds".getBytes());
    assertThat(myFunc(cl))...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...