как издеваться над Кафкой RecordMetadata - PullRequest
1 голос
/ 17 апреля 2019

Попытка написать модульный тест с использованием Mockito для приведенного ниже кода, но я получаю исключение неправильного использования метода.Результат не нулевой, проверенный, входящий в цикл тоже.

if(Result!=null) {
   result.getRecordMetadata().topic()
}

Вот что я написал:

@Mock
private SendResult<String, data> sendResultData;

RecordMetadata recordMetadata = new RecordMetadata(new TopicPartition("topic", 0), 0, 0, 1234567890L, 1234567890L, 1024, 1024);

SendResult<String, Data> result = new SendResult<String, Data>(producerRecord, recordMetadata);

when(recordMetadata.topic()).thenReturn("topic");

when(sendResultData.getRecordMetadata()).thenReturn(recordMetadata);

Исключение:

org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);

Also, this error might show up because:

you stub either of: final/private/equals()/hashCode() methods.
Those methods cannot be stubbed/verified.
Mocking methods declared on non-public parent classes is not supported.

inside when() you don't call method on mock but on some other object.

at XXXXX.test(Test.java:172)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)

1 Ответ

0 голосов
/ 17 апреля 2019

Я не вижу, чтобы вы издевались recordMetadata в вашем примере. Вы не можете издеваться над методом объекта, который не является ложным или шпионским.

Вы должны предоставить макет с аннотациями:

@Mock
private RecordMetadata recordMetadata;

или просто:

RecordMetadata recordMetadata = Mockito.mock(RecordMetadata.class);

Кроме того, @mock аннотация должна быть @Mock

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...