Junit测试SSM项目,个人理解为两个部分,第一部分是对Service层和Mapper层的测试,第二部分是对Controller层的测试。
一,导入Maven需要的依赖
1、junit,版本为4.11
2、jsonassert,使用的是最新版本
二,新建测试文件夹
在main下,与java同级新建test文件,并设置为test source。
三,生成测试类
进入要测试的类,右键GO TO选择Test,然后勾选需要测试的方法,Idea会自动生成测试包和类在test文件夹下,以下测试代码针对已生成的测试类而言。
四,对Service和Mapper层测试
//配置spring和junit整合,这样junit在启动时就会加载spring容器
@RunWith(SpringJUnit4ClassRunner.class)//固定写法
//告诉junit spring的配置文件
@ContextConfiguration({"classpath:spring-mybatis.xml"})//spring与mybatis整合的配置文件
public class UserServiceTest{
@Autowired
private UserService userService;//注入需要测试的Service或Mapper,直接调用方法测试即可
@Test
public void selectByPrimaryKey() throws Exception {
User user = userService.selectByPrimaryKey(1);
System.err.println("UserServiceTest.selectByPrimaryKey , 32 : user = " + user);
}
}
五、对Controller层测试
//配置spring和junit整合,这样junit在启动时就会加载spring容器
@RunWith(SpringJUnit4ClassRunner.class)
//告诉junit spring的配置文件
@ContextConfiguration(locations = {"classpath:spring-mvc.xml", "classpath:spring-mybatis.xml"})
//事务
@TransactionConfiguration(defaultRollback = true)
// 解决WebApplicationContext无法注入问题
@WebAppConfiguration
public class TaskControllerTest{
private MockMvc mockMvc;
@Autowired
private WebApplicationContext wac;//为setup方法里第一种初始化方法自动注入
@Autowired
private TaskController taskController;//注入要测试的Controller
@Before() //这个方法在每个方法执行之前都会执行一遍
public void setup() {
//mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); //初始化MockMvc对象
mockMvc = MockMvcBuilders.standaloneSetup(taskController).build();//两种方式都可以初始化mockMvc,推荐用这种,上面的会自动跳转地址status判断方法无效
}
@Test
public void getData() throws Exception {
MvcResult result = mockMvc.perform(get("/taskCon/getData", 1)//url
.param("id", "78"))//传入参数
.andDo(MockMvcResultHandlers.print())//打印MvcResult信息
.andExpect(content().json("{'taskType':2,'finishTime':'2018-01-15','submitTime':'2018-01-12','taskTime':'2018-01-17'}"))//测试规则,测试返回值是否为指定JSON
.andExpect(status().isOk())//测试状态码
.andReturn();//返回MvcResult
}
以上两种测试方式,推荐自定义一个测试父类,实现所有注解,新的测试类只需要继承即可,不需要重复写注解。
六,异常处理
1、不能理解的异常,尝试在运行测试类之前,使用Build-BuildProject
2、java.lang.ExceptionInInitializerError,Caused by: java.util.MissingResourceException: Can’t find bundle for base name javax.servlet.LocalStrings, locale zh_CN
在Project Structure -> Modules -> Dependencies 添加Library -> Tomcat
3、注意Junit版本问题,与Spring的兼容性问题