我正在尝试使用 @WebMvcTest 创建 Controller 测试,据我了解,当我添加测试类的 @WebMvcTest(ClientController.class) 注释时它不应该创建大量的 bean,而只创建该 Controller 需要的 bean。
我正在使用 @MockBean 来模拟此 Controller 所需的 bean,但不知何故它失败了,但有一个异常(exception),即另一个服务不存在“没有合格的 bean”此 Controller 需要但另一个 Controller 需要。
所以这个测试失败了:
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = ClientController.class)
public class ClientControllerTest {
@MockBean
ClientService clientService;
@Test
public void getClient() {
assertEquals(1,1);
}
}
我创建了一个相同版本(2.0.1)的空 Spring Boot 项目,并尝试在那里创建测试。效果非常好。
所以我的问题可能是因为我的项目有很多依赖项,但也许在这种情况下有一些常见的做法可以查看?什么会扰乱@WebMvcTest逻辑?
最佳答案
我找到了解决方法。不使用@WebMvcTest和@MockBean,而是手动创建所有内容:
//@WebMvcTest(ClientController.class)
@RunWith(SpringRunner.class)
public class ClientControllerTest {
private MockMvc mockMvc;
@Mock
ClientService clientService;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.standaloneSetup(
new ClientController(clientService)
).build();
}
适用于 Spring 1.4.X 和 Spring Boot 2.X(那里有不同的异常),但仍然没有解释为什么 @WebMvcTest 不起作用
关于java - @WebMvcTest 由于某种原因创建多个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55078125/