Я хочу смоделировать несколько возможных исключений, возникающих во время вызова метода службы. Я написал следующий тест для микронавтов (я использую микронавт 1.1.2
):
@MicronautTest
public class HelloWorldControllerTest {
@Inject
private AcmeService acmeService;
@Inject
@Client("/")
private RxHttpClient client;
@MockBean(AcmeService.class)
public AcmeService acmeService() {
return Mockito.mock(AcmeService.class);
}
@Test
public void test_without_exception() {
HttpResponse httpResponse = client.toBlocking().exchange(HttpRequest.GET("/"));
Assertions.assertEquals(HttpStatus.OK, httpResponse.getStatus());
}
@Test
public void test_with_nullpointer_exception() {
Mockito.doThrow(new NullPointerException("nullpointer"))
.when(acmeService)
.doSomething(Mockito.anyString());
HttpClientResponseException responseException = Assertions.assertThrows(HttpClientResponseException.class,
() -> client.toBlocking().exchange(HttpRequest.GET("/")));
Assertions.assertEquals("Internal Server Error: nullpointer", responseException.getMessage());
}
@Test
public void test_with_illegal_argument_exception() {
Mockito.doThrow(new IllegalArgumentException("illegal"))
.when(acmeService)
.doSomething(Mockito.anyString());
HttpClientResponseException responseException = Assertions.assertThrows(HttpClientResponseException.class,
() -> client.toBlocking().exchange(HttpRequest.GET("/")));
Assertions.assertEquals("Internal Server Error: illegal", responseException.getMessage());
}
}
Проблема в том, что при выполнении всего класса теста выполняется только первый тестовый этап, второй и третий сбой, потому что не выдается исключение (я ожидаю, что выдается исключение). Но если я выполняю каждый тест отдельно, каждый проход теста (исключение выдается, как ожидалось).
Перемешивание AcmeService работает неправильно. Я также пытался сбросить макет (Mockito.reset) после каждого теста, но это тоже не работает.
Я не могу имитировать исключения, возникающие при выполнении сервиса. Отладка показывает, что в каждом тестовом случае поддельный сервис отличается. Пересмотренная служба, используемая контроллером hello world, также отличается (поэтому она не работает).
Примеры насмешек https://micronaut -projects.github.io / micronaut-test / latest / guide / index.html не показывают различий.
Итак, мой вопрос: как я могу имитировать различные исключения, выдаваемые службой? Почему мой тест не работает?
Я ценю ваши мысли.