@WebMvcTest由于某种原因创建了多个控制器

时间:2019-03-09 14:01:43

标签: java spring unit-testing testing junit

我正在尝试使用 @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 逻辑?

1 个答案:

答案 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不起作用