作为java web程序员,我们经常要写junit测试,在不启动整个web项目的情况下,测试自己的service实现或者是dao实现,我们来充分利用下junit4的强大功能。
1. 新建一个junit4的测试类
测试类要继承AbstractJUnit4SpringContextTests
类,该父类能够调用spring context
2. 该junit测试类的源码
package com.songyh.modules.system.service;
import com.songyh.modules.system.entity.SysRole;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import java.util.List;
/**
* 系统角色API测试类
* Created by songyh on 2017/2/10.
*/
@ContextConfiguration(locations = {"classpath:spring/spring-context*.xml"})
public class SysRoleServiceTest extends AbstractJUnit4SpringContextTests {
//注入
@Autowired
private SysRoleService sysRoleService;
/**
* 执行测试,就会执行有@Test注解的方法,相当于普通java类的main方法
* 该实例中可以直接调用spring已经注入的bean即sysRoleService
*/
@Test
public void testGetSysRoleByUserId() {
String userId = "867ccabfed5e40e480438f72dcab7126";
List<SysRole> sysRoleList = sysRoleService.getSysRoleByUserId(userId);
for(SysRole sysRole : sysRoleList) {
System.out.println(sysRole.getRoleName());
}
}
}
3.测试类代码说明
@ContextConfiguration(locations = {"classpath:spring/spring-context*.xml"})
public class SysRoleServiceTest extends AbstractJUnit4SpringContextTests {
以上注解,会将spring context的bean全部注册到context中,这样在junit类中就可以随意使用spring 相关的实体bean对象了。当然我们的测试类必须继承AbstractJUnit4SpringContextTests
注意:
如果是maven多模块项目,很可能测试类和spring配置文件不在一个模块下,这种需要拷贝资源文件到测试的模块中(我只找到这种方法,如果有其他方法请指教)
4. 运行该junit
执行测试,有@Test注解的方法,就相当于普通java类的main方法,每个junit测试类至少要有一个@test注解的方法,可以有多个,多个则按顺序执行方法。
@Test
public void testGetSysRoleByUserId() {
String userId = "867ccabfed5e40e480438f72dcab7126";
List<SysRole> sysRoleList = sysRoleService.getSysRoleByUserId(userId);
for(SysRole sysRole : sysRoleList) {
System.out.println(sysRole.getRoleName());
}
}