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

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

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

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

【问题讨论】:

    标签: java web-testing


    【解决方案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 或您指定的内容(它使测试更快)。你可以阅读stackoverflow.com/questions/39865596/…
    • 这是因为我需要将 properties = "classpath:application.properties 添加到类
    • 如果我想从 app.properties 加载上下文
    • @TestPropertySource("classpath:application.properties") 我可以添加这个吗?因为我需要 application.properties 在那里定义了一个 bean
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    相关资源
    最近更新 更多