我正在尝试使用 @WebMvcTest 创建一个控制器测试,据我了解,当我在测试类的 @WebMvcTest(ClientController.class)注释中添加时它不应创建大量的bean,而应创建此控制器所需的bean。
我正在使用 @MockBean 来模拟该控制器所需的bean,但是由于某种原因,它失败了,因为另一个服务的'Noqualing bean'没有该控制器需要,但另一个需要。
因此该测试失败:
@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 逻辑?
答案 0 :(得分:0)
我找到了一种解决方法。不使用@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不起作用