摘要:地址提供了,能够很方便的来测试。同时也提供了更进一步简化了测试需要的配置工作。本章节将分别举例说明在不使用和使用下如何对进行测试。例子测试的关键是使用对象,利用它我们能够在不需启动容器的情况下测试的行为。
Github地址
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")); } }
在这段代码里,主要有三个步骤:
将测试类标记为@WebAppConfiguration
通过webAppContextSetup(wac).build()构建MockMvc
利用MockMvc对结果进行判断
例子2:Spring + Mock在例子1里,FooController使用了一个实体FooImpl的Bean,实际上我们也可以提供一个Foo的mock bean来做测试,这样就能够更多的控制测试过程。如果你还不知道Mock那么请看Chapter 3: 使用Mockito。
源代码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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70229.html
摘要:因为只有这样才能够在测试环境下发现生产环境的问题,也避免出现一些因为配置不同导致的奇怪问题。而方法则能够不改变原有配置不提供新的配置的情况下,就能够关闭。 Github地址 在Chapter 1: 基本用法 - 使用Spring Boot Testing工具里提到: 除了单元测试(不需要初始化ApplicationContext的测试)外,尽量将测试配置和生产配置保持一致。比如如果生产...
摘要:地址是提供的方便测试序列化反序列化的测试工具,在的文档中有一些介绍。例子简单例子源代码见使用通包下的文件测试结果是否正确或者使用基于的校验例子测试可以用来测试。这个例子里使用了自定义的测试代码例子使用事实上也可以配合一起使用。 Github地址 @JsonTest是Spring Boot提供的方便测试JSON序列化反序列化的测试工具,在Spring Boot的文档中有一些介绍。 需要注...
摘要:源代码见需要注意的是,如果是专供某个测试类使用的话,把它放到外部并不是一个好主意,因为它有可能会被扫描到,从而产生一些奇怪的问题。 Github地址 既然我们现在开发的是一个Spring项目,那么肯定会用到Spring Framework的各种特性,这些特性实在是太好用了,它能够大大提高我们的开发效率。那么自然而然,你会想在测试代码里也能够利用Spring Framework提供的特...
摘要:地址在使用工具中提到在测试代码之间尽量做到配置共用。本章将列举几种共享测试配置的方法我们可以将测试配置放在一个里,然后在测试或中引用它。也可以利用的及自定义机制,提供自己的用在测试配置上。 Github地址 在使用Spring Boot Testing工具中提到: 在测试代码之间尽量做到配置共用。...能够有效利用Spring TestContext Framework的缓存机制,Ap...
摘要:地址前面一个部分讲解了如何使用工具来测试项目,现在我们讲解如何使用工具来测试项目。所以我们可以利用这个特性来进一步简化测试代码。因为只有这样才能够在测试环境下发现生产环境的问题,也避免出现一些因为配置不同导致的奇怪问题。 Github地址 前面一个部分讲解了如何使用Spring Testing工具来测试Spring项目,现在我们讲解如何使用Spring Boot Testing工具来测...
阅读 1204·2021-11-23 09:51
阅读 1982·2021-10-08 10:05
阅读 2341·2019-08-30 15:56
阅读 1902·2019-08-30 15:55
阅读 2642·2019-08-30 15:55
阅读 2488·2019-08-30 13:53
阅读 3500·2019-08-30 12:52
阅读 1251·2019-08-29 10:57