1.加入依赖包
使用Spring的测试框架需要加入以下依赖包:
-
JUnit 4 (官方下载:http://www.junit.org/)
-
Spring Test (Spring框架中的test包)
-
Spring 相关其他依赖包(不再赘述了,就是context等包)
2. 创建测试源目录和包
创建一个和src下面与main同级创建test目录(测试目录),基本上大的框架(像spring的测试文件就是这样的,这已经是默认的了)。
3. 创建测试类
创建一个测试用的类,推荐名称为 “被测试类名称 + Test”。 创建测试类通常的两种方式:
-
根据需求继承必须的类
-
根据需求加上必须的注解
第一种方式:测试类应该继承与 AbstractJUnit4SpringContextTests 或 AbstractTransactionalJUnit4SpringContextTests
-
AbstractJUnit4springcontextTests (测试中不涉及事物)
-
AbstractTransactionalJUnit4SpringContextTests (测试类中,需要用到事务管理)(比如要在测试结果出来之后回滚测试内容)
第二种方式:使用注解
-
AbstractJUnit4springcontextTests可以用@RunWith(SpringJUnit4ClassRunner.class)来实现同样的功能
-
AbstractTransactionalJUnit4SpringContextTests 可以用@RunWith(SpringJUnit4ClassRunner.class)+@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)来实现同样的功能
4. 通过JUnit 4 执行或maven自动执行
-
Junit:右键方法名,选择则“Run As”→“JUnit Test”即可
-
maven:默认自动回执行测试类,如果想要跳过测试可以添加如下命令:-Dmaven.test.skip=true
5.测试代码解释(测试Controller层)
code
@Transactional//每次都开启一个事务
@WebAppConfiguration//测试环境使用,用来表示测试环境使用的ApplicationContext将是WebApplicationContext类型的;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:spring-*.xml"})
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class BaseSpringJUnit {
//执行@Test标注的方法之前都执行这个方法
@Before
public void setUp() throws Exception {
//to doing somthing
}
//执行@Test标注的方法之之后都执行这个方法
@After
public void tearDown() throws Exception {
//to doing somthing
}
//测试方法
@Test
public void testPrint(){
//to doing somthing
}
}
@Transactional:每次都开启一个事务
@WebAppConfiguration:测试环境使用,用来表示测试环境使用的ApplicationContext将是WebApplicationContext类型的;
@ContextConfiguration(locations = {"classpath:spring-.xml"}):Spring整合JUnit4测试时,使用注解引入多个配置文件
@RunWith(SpringJUnit4ClassRunner.class)和@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)上面已经过
其中:
mockMvc.perform(post("/a/pro/unit/list").param("name", "s")).andExpect(MockMvcResultMatchers.view().name("modules/pro/unitList"))
.andExpect(MockMvcResultMatchers.model().attributeExists("page"))
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value("10000"))
.andDo(MockMvcResultHandlers.print())
.andReturn();
其中使用MockMvcResultMatchers.jsonPath("$.code").value("10000"),需要导入jar包
pom.xml配置需要加上
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>0.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path-assert</artifactId>
<version>0.8.1</version>
<scope>test</scope>
</dependency>
最后整个过程:
-
1、mockMvc.perform执行一个请求;
-
2、MockMvcRequestBuilders.get("/user/1")构造一个请求
-
3、ResultActions.andExpect添加执行完成后的断言
-
4、ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情,比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。
-
5、ResultActions.andReturn表示执行完成后返回相应的结果。
网友评论