软件开发中,单元测试也很重要,能够快速检查、验证源代码中包含的错误,早期发现并解决错误,节省开发成本...,好处非常多,这里就不多说了。下面谈一下我使用单元测试组件Junit的经验。
Junit使用起来很简单,在eclipse开发环境中只要引入Junit的jar包(如junit-4.4.jar),就可以编写测试类了。我使用的方法如下:
Spring环境下的Junit测试
我一般使用一个基类,我们的应用通常包含spring框架,所以我在基类中引入一些spring的环境文件,这样便于和开发环境一致。基类RootTest如下:
public abstract class RootTest extends TestCase { protected ApplicationContext ctx;//spring的上下文类 protected Log log = LogFactory.getLog(getClass()); protected abstract String getBeanXml();//这里是取得一个spring配置xml文件 protected String[] getBeanXmls() {//这里是取得多个spring配置xml文件,比较通用,其实用这个就够用了 String[] locations = null; return locations; } @Override protected void setUp() throws Exception {//测试类加载时,初始化处理,读取环境变量 if(getBeanXmls()!=null){ ctx = new ClassPathXmlApplicationContext(getBeanXmls()); }else{ ctx = new ClassPathXmlApplicationContext(getBeanXml()); } } @Override protected void tearDown() throws Exception {//测试类释放时,释放一些存储信息 ClassPathXmlApplicationContext cc = (ClassPathXmlApplicationContext) this.ctx; if(cc!=null) cc.close(); } } |
业务中使用测试类的方法如下:
public class TestMaxUserBizImpl extends RootTest { private MaxUserBiz maxUserBiz;//业务类的接口 @Override protected String getBeanXml() { return null; } @Override protected String[] getBeanXmls() {//写入使用的spring配置文件信息 String[] locations={"spring_test.xml", "mybatis.xml", "etc/app_test.xml", "cn/zwork/crm/oss/oss-bean.xml", "cn/zwork/crm/oss/ossLicenseExecute-mapper.xml", "cn/zwork/crm/oss/ossLicenseInfo-mapper.xml" }; return locations; } protected void setUp() throws Exception {//初始化加载sprng配置信息 super.setUp(); //多租户环境设置 TenantInfo tenantInfo=new TenantInfo(); tenantInfo.setMultiTenant(true); tenantInfo.setTenantName("zcrm_develop"); CurrentThreadContext.setTenantValue(tenantInfo); maxUserBiz = (MaxUserBiz) ctx.getBean("maxUserBiz"); } //启用员工时,判断许可分配 public void testassignLicense(){//测试类的方法 String[] userIds={"1","2"}; maxUserBiz.assignLicense(userIds); } } |
这样就可以了,测试时,只需要在eclipse中光标落在需要测试的方法testassignLicense上,右键点击Junit Test运行就可以得到结果了。
Http远程调用的测试
可以使用HttpClient类的一些方法,远程调用url来测试。范例如下:
public class TestOperationManageService { //这里使用一个内部类,主要解决统一字符集转换为utf-8 private static class UTF8PostMethod extends PostMethod { public UTF8PostMethod(String url) { super(url); } @Override public String getRequestCharSet() { // return super.getRequestCharSet(); return "UTF-8"; } } @Test public void callCreate() throws HttpException, IOException{ PostMethod method=new UTF8PostMethod(http://localhost:8080/oss/service/create); // 写入参数Tenant对象 String params="{tenant:'YAN0529',name:'test0529',contact:'test0508',post:'100025',phone:'65869047',email:'admin2@123.com',memo:'备注'}";// method.setParameter("action",params ); HttpClient httpClient = new HttpClient(); int code = httpClient.executeMethod(method); System.out.println(method.getResponseBodyAsString()); System.out.println(code); method.releaseConnection();//释放连接 } } |