java - @WebMvcTest 由于某种原因创建多个 Controller

标签 java spring unit-testing testing junit

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

相关文章:

java - 根据从 XML 文件中解析信息的 vector 绘制 ListField 并使用 Graphics 绘制屏幕

c++ - C++ 中的单元测试

java - Android:WAITING线程完成执行该方法

java - Game Of Life Java - 使用二维数组和 for 循环计算邻居

Java + RestFB API : Getting fresh Page Access Token without messing with AppID, appSecret

java - Spring、JSP、Ajax 和 JQuery 我应该如何为我的项目建模?

Spring:new() 运算符和 Autowiring 在一起

xml - Spring 加载所有 JNDI 属性

unit-testing - 应该测试模型类吗?

java - 在 Java 中在运行时访问方法调用参数