Spring mvc 在JUnit@Nested类中使用Mockito-given/willThrow 我正在使用JUnit5和Mockito测试Spring控制器。我的控制器使用一个服务,在我的测试类中用@Mockbean注释。为了组织我的测试,我使用user@nestedclass。我使用Mockito given/willThrow来模拟我的服务可以抛出异常这一事实。然后,如果服务抛出特定的异常类型,控制器将返回相应的状态代码。 因此,在@Nested类中,例如: @Test @SneakyThrows void test_404() { String message = "message"; given(myService.doSomething(anyLong())).willThrow(new CustomExceptionOne(message)); mockMvc.perform(get("/api/doSomething") .contentType("application/json;charset=UTF-8")) .andExpect(status().isNotFound()) .andExpect(content().string(message)) .andReturn(); }

Spring mvc 在JUnit@Nested类中使用Mockito-given/willThrow 我正在使用JUnit5和Mockito测试Spring控制器。我的控制器使用一个服务,在我的测试类中用@Mockbean注释。为了组织我的测试,我使用user@nestedclass。我使用Mockito given/willThrow来模拟我的服务可以抛出异常这一事实。然后,如果服务抛出特定的异常类型,控制器将返回相应的状态代码。 因此,在@Nested类中,例如: @Test @SneakyThrows void test_404() { String message = "message"; given(myService.doSomething(anyLong())).willThrow(new CustomExceptionOne(message)); mockMvc.perform(get("/api/doSomething") .contentType("application/json;charset=UTF-8")) .andExpect(status().isNotFound()) .andExpect(content().string(message)) .andReturn(); },spring-mvc,mockito,junit5,Spring Mvc,Mockito,Junit5,在同一个类中,我有一个完整的测试套件,其中我测试当服务抛出CustomExceptionTwo时,控制器返回状态409,CustomExceptionTree返回412,以此类推。如果我有一个不可预测的异常,控制器返回500 如果我一个接一个地运行测试,所有的测试都会正常工作。如果我运行整个套件(只运行@Nested类或上层类),那么它似乎是给定的第一个Mockito,它决定了其他给定将返回什么。例如,如果404测试是第一个运行的,那么所有其他测试都将失败,因为所有其他Mockito将返回Cus

在同一个类中,我有一个完整的测试套件,其中我测试当服务抛出CustomExceptionTwo时,控制器返回状态409,CustomExceptionTree返回412,以此类推。如果我有一个不可预测的异常,控制器返回500

如果我一个接一个地运行测试,所有的测试都会正常工作。如果我运行整个套件(只运行@Nested类或上层类),那么它似乎是给定的第一个Mockito,它决定了其他给定将返回什么。例如,如果404测试是第一个运行的,那么所有其他测试都将失败,因为所有其他Mockito将返回CustomExceptionOne,而不是测试中写入的内容

如果我将所有测试方法放在上层类而不是@Nested类中,那么所有测试都会通过


非常感谢您的帮助

在我看来,您遇到了:


这两个问题被标记为2.4。x,考虑升级到那个版本。

Spring /Spring Bug版本?谢谢,它工作!我搜索了很多,但我认为这是一个莫基托问题。