@WebMvcTest 可以有两个控制器吗

Posted

技术标签:

【中文标题】@WebMvcTest 可以有两个控制器吗【英文标题】:Can @WebMvcTest have two controllers 【发布时间】:2018-07-04 02:22:13 【问题描述】:

我正在尝试测试两个不同的控制器类,因为我想从两个类中分别测试一个方法,并且我将使用 @WebMvcTest,我的问题是有没有办法将模拟注入到这两个类中, 可能是这样的?

@WebMvcTest(HomeController.class , BookController.class)
public class ControllerTest

当然这会产生错误,这是否意味着在使用 @WebMvcTest 时我们只能测试一个控制器中的方法?每班

【问题讨论】:

【参考方案1】:

@WebMvcTest 接受 Class<?>[]value()

public @interface WebMvcTest 
  ...
    @AliasFor("controllers")
    Class<?>[] value() default ;
  ...

传递单个值(可能只是因为它是注释)或数组是合法的。 您的问题是您没有使用正确的语法来声明文字数组。 试试看:

@WebMvcTest(HomeController.class, BookController.class)
public class ControllerTest

请注意,通过使用 @WebMvcTest 注释您的测试类而不重视注释声明中的任何参数:

@WebMvcTest
public class ControllerTest

所有 Spring 控制器都添加到 Spring 上下文中。

【讨论】:

当我们使用WebMvcTest注解的时候就不需要使用SpringbootTest注解@davidxxx是吗? 确实如此。这是一个替代方案。 SpringBootTest 注释加载所有上下文(它使测试变慢),而 WebMvcTest 注释只加载 Mvc bean 或您指定的内容(它使测试更快)。你可以阅读***.com/questions/39865596/… 这是因为我需要将 properties = "classpath:application.properties 添加到类 如果我想从 app.properties 加载上下文 @TestPropertySource("classpath:application.properties") 我可以添加这个吗?因为我需要 application.properties 在那里定义了一个 bean

以上是关于@WebMvcTest 可以有两个控制器吗的主要内容,如果未能解决你的问题,请参考以下文章

@WebMvcTest 测试类中的 UnsatisfiedDependencyException

Spring Boot 2 @WebMvcTest 和 OAuth2 #oauth2.hasScope 控制器导致 IllegalArgumentException

如何将 @WebMvcTest 用于单元测试 POST 方法?

SpringBoot @WebMvcTest,自动装配 RestTemplateBuilder

Spring 的 @WebMvcTest 不适用于 Java 8 类型

带有帖子的 Spring WebMvcTest 返回 403