Тестирование выдачи исключений Async (ApplicationModuleListener)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Тестирование выдачи исключений Async (ApplicationModuleListener)

Сообщение Anonymous »

Я пытаюсь протестировать метод асинхронного прослушивателя, помеченный @ApplicationModuleListener (это важно для других аспектов приложения, поэтому само по себе это не проблема), который, как я вижу, также помечен @Async .

У меня есть следующий код:

Код: Выделить всё

@Service
public class MyService {
...
@ApplicationModuleListener
public void onEvent(Event event) {
if(event.getSomeField().equals(someExpectedValue)) {
// do some expected code
}
else {
throw new UnexpectedValueException("fail!");
}
}
и тестируем:

Код: Выделить всё

@SpringBootTest
class MyServiceTest {
@Autowired
MyService myService;

@Test
void testExceptionThrow {
Event event = new Event("someUnexpectedValue");

assertThrows(UnexpectedValueException.class, () -> myService.onEvent(event));
}
}
Этот тест завершается неудачно, что говорит о том, что исключение не было создано.
Когда я отлаживаю тест, он показывает, что во время выполнения достигается предложение else и возникает исключение. выбрасывается, но с этого момента он используется несколькими пружинными асинхронными механизмами. Наконец, похоже, что исключение используется на уровне AsyncExecutionInterceptor.invoke() и не возвращается к моему тестовому методу, который его вызвал.
Есть ли это? любой способ тестирования сценария исключения для метода прослушивателя событий, кроме имитирования броска с использованием метода When().thenThrow() Mockito?

Подробнее здесь: https://stackoverflow.com/questions/792 ... n-throwing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»