Я столкнулся с проблемой, пытаясь смоделировать класс с помощью PowerMock. Прежде всего, вот мои текущие зависимости gradle:
testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile "org.mockito:mockito-core:2.+"
testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.2'
testCompile group: 'org.powermock', name: 'powermock-api-mockito2', version: '2.0.2'
Я пытаюсь смоделировать вызовы брокеру kafka. Код выглядит примерно так:
public class MyConsumer {
public Consumer<Long, String> createConsumer() {
...
Consumer<Long, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(TOPIC);
....
}
}
Эти две строки в createConsumer
- все, что я пытаюсь высмеять. Мой тест выглядит примерно так:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyConsumer.class)
public class MyConsumerTest {
@Test
public void testCreateConsumer() {
...
KafkaConsumer mockConsumer = mock(KafkaConsumer.class);
doNothing().when(mockConsumer).subscribe(TOPIC);
PowerMockito.whenNew(KafkaConsumer.class).withAnyArguments().thenReturn(mockConsumer);
Consumer<Long, String> result = myConsumerInstance.createConsumer();
...
}
}
Когда я пытаюсь запустить тесты, они никогда не запускаются, и я получаю эту ошибку:
> Task :compileTestJava FAILED
/Users/myuser/myproject/src/test/java/myConsumerTest.java:101: error: unreported exception Exception; must be caught or declared to be thrown
PowerMockito.whenNew(KafkaConsumer.class).withAnyArguments().thenReturn(mockConsumer);
^
Note: /Users/myuser/myproject/src/test/java/myConsumerTest.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: /Users/myuser/myproject/src/test/java/myConsumerTest.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
FAILURE: Build failed with an exception.
Так что я решил, что оберну попытаться получить больше информации о том, что пошло не так. Когда я это сделал, тесты запустились, но этот конкретный c тест не удался, выдав эту ошибку:
Kafka.analyticsConsumerTest > testCreateConsumer FAILED
java.lang.RuntimeException at PowerMockTestNotifierImpl.java:84
Caused by: org.mockito.exceptions.base.MockitoException at MethodRoadie.java:87
Я так и не понял, как извлекать больше информации из Это. Кто-нибудь сталкивался с чем-то подобным?
Моя текущая рабочая теория связана с тем, как класс KafkaConsumer возвращает Consumer? Потребитель в этом случае - org.apache.kafka.clients.consumer.Consumer
. Возможно я не издеваюсь это правильно? Любая помощь будет принята с благодарностью.