我想模拟在服务方法调用期间抛出的一些可能的异常。我编写了以下micronaut测试(我正在使用micronaut 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的嘲讽示例没有区别。
所以,我的问题是,如何模拟服务抛出的不同异常。为什么我的测试无法正常工作?
感谢您的想法。