欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 宝鼎售后问题提交 | 后台管理


新闻资讯

MENU

软件开发知识

源代码BootMvc_2_Test.java: @WebMvcTest@ContextConfiguration(cla

点击: 次  来源:昆山软开发 时间:2017-12-12

原文出处: chanjarster

Spring Testing Framework提供了Spring MVC Test Framework,可以或许很利便的来测试Controller。同时Spring Boot也提供了Auto-configured Spring MVC tests更进一步简化了测试需要的设置事情。

本章节将别离举例说明在不利用Spring Boot和利用Spring Boot下如何对Spring MVC举办测试。

例子1:Spring

测试Spring MVC的要害是利用MockMvc工具,操作它我们可以或许在不需启动Servlet容器的环境下测试Controller的行为。

源代码SpringMvc_1_Test.java:

@EnableWebMvc
@WebAppConfiguration
@ContextConfiguration(classes = { FooController.class, FooImpl.class })
public class SpringMvc_1_Test extends AbstractTestNGSpringContextTests {

  @Autowired
  private WebApplicationContext wac;

  private MockMvc mvc;

  @BeforeMethod
  public void prepareMockMvc() {
    this.mvc = webAppContextSetup(wac).build();
  }

  @Test
  public void testController() throws Exception {

    this.mvc.perform(get("/foo/check-code-dup").param("code", "123"))
        .andDo(print())
        .andExpect(status().isOk())
        .andExpect(content().string("true"));

  }

}

在这段代码里,主要有三个步调:

  1. 将测试类标志为@WebAppConfiguration
  2. 通过webAppContextSetup(wac).build()构建MockMvc
  3. 操作MockMvc对功效举办判定

例子2:Spring + Mock

在例子1里,FooController利用了一个实体FooImpl的Bean,实际上我们也可以提供一个Foo的mock bean来做测试,劳务派遣管理系统,这样就可以或许更多的节制测试进程。假如你还不知道Mock那么请看Spring、Spring Boot 和 TestNG 测试指南 ( 4 )。

源代码SpringMvc_2_Test.java:

@EnableWebMvc
@WebAppConfiguration
@ContextConfiguration(classes = { FooController.class })
@TestExecutionListeners(listeners = MockitoTestExecutionListener.class)
public class SpringMvc_2_Test extends AbstractTestNGSpringContextTests {

  @Autowired
  private WebApplicationContext wac;

  @MockBean
  private Foo foo;

  private MockMvc mvc;

  @BeforeMethod
  public void prepareMockMvc() {
    this.mvc = webAppContextSetup(wac).build();
  }

  @Test
  public void testController() throws Exception {

    when(foo.checkCodeDuplicate(anyString())).thenReturn(true);

    this.mvc.perform(get("/foo/check-code-dup").param("code", "123"))
        .andDo(print())
        .andExpect(status().isOk())
        .andExpect(content().string("true"));

  }

}

例子3:Spring Boot

Spring Boot提供了@WebMvcTest更进一步简化了对付Spring MVC的测试,我们提供了对应例子1的Spring Boot版本。

源代码BootMvc_1_Test.java:

@WebMvcTest
@ContextConfiguration(classes = { FooController.class, FooImpl.class })
public class BootMvc_1_Test extends AbstractTestNGSpringContextTests {

  @Autowired
  private MockMvc mvc;

  @Test
  public void testController() throws Exception {

    this.mvc.perform(get("/foo/check-code-dup").param("code", "123"))
        .andDo(print())
        .andExpect(status().isOk())
        .andExpect(content().string("true"));

  }

}

在这里,劳务派遣管理系统,昆山软件开发,我们不需要本身构建MockMvc,直接利用@Autowired注入就行了,是不是很利便?

例子4:Spring Boot + Mock

这个是对应例子2的Spring Boot版本,源代码BootMvc_2_Test.java:

@WebMvcTest
@ContextConfiguration(classes = { FooController.class })
@TestExecutionListeners(listeners = MockitoTestExecutionListener.class)
public class BootMvc_2_Test extends AbstractTestNGSpringContextTests {

  @Autowired
  private MockMvc mvc;

  @MockBean
  private Foo foo;

  @Test
  public void testController() throws Exception {

    when(foo.checkCodeDuplicate(anyString())).thenReturn(true);

    this.mvc.perform(get("/foo/check-code-dup").param("code", "123"))
        .andDo(print())
        .andExpect(status().isOk())
        .andExpect(content().string("true"));

  }

}

参考文档

  • Loading a WebApplicationContext
  • Spring MVC Test Framework
  • Spring MVC Official Sample Tests
  • Spring MVC showcase – with full mvc test
  • Auto-configured Spring MVC tests
  • Spring Framework Testing
  • Spring Boot Testing
  • Spring Guides – Testing the Web Layer