Утверждение, что указанное исключение c генерируется в методе слушателя Кафки - PullRequest
0 голосов
/ 05 марта 2020

У меня есть метод @KafkaListener, который может выдать IllegalArgumentException. Ради вопроса это может выглядеть так:

@KafkaListener(topics = "SomeTopic")
public void listen(ConsumerRecord<String, SomeDto> record) {
    throw new IllegalArgumentException("Whats up?");
}

В рамках интеграционного тестирования (с использованием Spring Boot и JUnit) я хочу протестировать метод и утверждать, что исключение действительно было выдано. В моем тестовом классе у меня есть тест, который сводится к:

@Rule
public ExpectedException exceptionRule = ExpectedException.none();

@Test
public void createHierarchy_invalidEventType_exception() {
    exceptionRule.expect(IllegalArgumentException.class);
    kafkaTemplate.send("SomeTopic", someDto);
}

Журнал показывает:

org.springframework.kafka.listener.ListenerExecutionFailedException: метод слушателя 'publi c void com.something.EventService.listenPosition (org. apache .kafka.clients.consumer.ConsumerRecord) 'выбросило исключение; вложенное исключение: java .lang.IllegalArgumentException: этот тип события не поддерживается.;

Итак, IllegalArgumentException обернут в ListenerExecutionFailedException, и я изменил свой метод тестирования:

@Test
public void createHierarchy_invalidEventType_exception() {
    exceptionRule.expectCause(isA(IllegalArgumentException.class));
    kafkaTemplate.send("SomeTopic", someDto);
}

Но журнал все еще показывает ту же трассировку стека. Что я делаю неправильно? Как проверить, что метод @KafkaListener действительно выдал исключение?

РЕДАКТИРОВАТЬ: Вот трассировка стека теста:

java.lang.AssertionError: Expected test to throw (an instance of org.springframework.kafka.listener.ListenerExecutionFailedException and exception with cause is an instance of java.lang.IllegalArgumentException)

    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.rules.ExpectedException.failDueToMissingException(ExpectedException.java:263)
    at org.junit.rules.ExpectedException.access$200(ExpectedException.java:106)
    at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:245)
    at org.junit.rules.RunRules.evaluate(RunRules.java:20)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)

Спасибо.

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