基于 Maven 的Spring Boot 工程的Unit Test 配置
Dec062017
目 录
[ 隐藏 ]
基于 Maven 的Spring Boot 工程的Unit Test 配置
1. 使用一个pojo,用注解的方式配置Spring test 的context
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.FilterType; import org.springframework.transaction.annotation.EnableTransactionManagement; @ComponentScan( value = { "com.jack.yin.test"}, excludeFilters = @ComponentScan.Filter( type=FilterType.REGEX, pattern = {"com.jack.yin.test.server.*"}) ) @EnableAutoConfiguration() @EnableTransactionManagement public class SpringRootContextConfigForTest { }
2. 配置一个普通类单元测试的基类,其他测试类可以继承该类,省略一些通用配置
@Transactional 配置使得单元测试与数据交互式不会污染数据,测试完成之后,自动会滚对数据的修改。
@ContextConfiguration 引入Spring Context配置
@Ignore 忽略该类,表示该类中不包含test case,测试时忽略
import org.junit.Ignore; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; @Ignore @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest @ContextConfiguration(classes=SpringRootContextConfigForTest.class) @Transactional(rollbackFor=Exception.class,readOnly = true) public class CommonTest { }
3. Mvc中Controller的测试基类
加上@WebAppConfiguration注解,引入WebApp相关依赖。
WebApplicationContext是Spring测试框架自动注入,使用这个对象可以得到一个MockMvc实例。 使用MockMvc可以测试MVC中的controller 比如:
WebApplicationContext wac = ...; MockMvc mockMvc = webAppContextSetup(wac).build(); mockMvc.perform(get("/form")) .andExpect(status().isOk()) .andExpect(content().mimeType("text/html")) .andExpect(forwardedUrl("/WEB-INF/layouts/main.jsp"));
其中 mockMvc.perform() 返回的是ResultActions,可以调用它的以下方法测试。
ResultActions andDo(ResultHandler handler) Perform a general action. ResultActions andExpect(ResultMatcher matcher) Perform an expectation. MvcResult andReturn() Return the result of the executed request for direct access to the results.
例如:
static imports: MockMvcRequestBuilders.*, MockMvcResultMatchers.* mockMvc.perform(get("/person/1")) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.person.name").value("Jason")); mockMvc.perform(post("/form")) .andExpect(status().isOk()) .andExpect(redirectedUrl("/person/1")) .andExpect(model().size(1)) .andExpect(model().attributeExists("person")) .andExpect(flash().attributeCount(1)) .andExpect(flash().attribute("message", "success!"));
获取movkMvc:
import org.junit.Before; import org.junit.Ignore; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; @Ignore @WebAppConfiguration public class WebCommonTest extends CommonTest{ public MockMvc mockMvc; @Autowired protected WebApplicationContext wac; @Before() public void setup() { mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); } }
4. 打包测试
一次性跑一组unit test,可以使用junit的测试套件(Suite),但是貌似这个套间不太好用,于是引入google的强大的测试工具类junittoolbox。
该工具类支持通配符来进行打包配置,一次测试一组符合某个pattern的unit test。 manve的pom中引入以下依赖:
com.googlecode.junit-toolbox junit-toolbox 2.2 test
配置类似如下的测试套件类:
import org.junit.runner.RunWith; import com.googlecode.junittoolbox.SuiteClasses; import com.googlecode.junittoolbox.WildcardPatternSuite; @RunWith(WildcardPatternSuite.class) @SuiteClasses({"**/*.class","!TestAll.class"}) public class TestAll { }赞 赏
微信赞赏 支付宝赞赏
本文固定链接: https://www.jack-yin.com/coding/test/2638.html | 边城网事