@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