JUnit
in java
单元测试配置:
选择你要测试类中的方法,点击完成!便生成测试类的基本框架,如下代码,我们以对一个DAO类测试为例:
/**//*
* Copyright reserved 2005 by XXXXCo. Ltd.
* Author:Fu wei Date:2006-9-4
*/
import junit.framework.TestCase;
/** *//**
* @author Fu wei
*/
public class OrgTypeDAOTest extends TestCase ...{
/** *//**
* @param arg0
*/
public OrgTypeDAOTest(String arg0) ...{
super(arg0);
}
/**//*
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception ...{
super.setUp();
}
/**//*
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception ...{
super.tearDown();
}
/** *//**
* 主函数
* @param args
*/
public static void main(String[] args)...{
TestRunner.run(OrgTypeDAOTest .class);
}
/** *//**
* {@link OrgTypeDAO#getOrgTypeList()} 的测试方法。
*/
public final void testGetOrgTypeList() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#insertOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)} 的测试方法。
*/
public final void testInsertOrgTypeInfo() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#deleteOrgTypeInfo(java.lang.String)} 的测试方法。
*/
public final void testDeleteOrgTypeInfo() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#updateOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)} 的测试方法。
*/
public final void testUpdateOrgTypeInfo() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#getOrgTypeInfoById(java.lang.String)} 的测试方法。
*/
public final void testGetOrgTypeInfoById() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#isRepeatOrgTypeInfo(java.lang.String)} 的测试方法。
*/
public final void testIsRepeatOrgTypeInfoString() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#isRepeatOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)} 的测试方法。
*/
public final void testIsRepeatOrgTypeInfoOrgTypeVO() ...{
fail("尚未实现"); // TODO
}
/** *//**
* {@link OrgTypeDAO#getFlatOrgIdByName(java.lang.String)} 的测试方法。
*/
public final void testGetFlatOrgIdByName() ...{
fail("尚未实现"); // TODO
}
}
JUnit单元测试一共要注意一下几点:
(1)import junit.framework.TestCase 和
junit.textui.TestRunner;
(2)继承junit.framework.TestCase ;
(3)自行添加一个main方法 中调用TestRunner.run(测试类名.class);
(4)有一个调用super(String)的构造函数;
以上都是JUnit必有的特征,除以上外,我们发现有许多以test开头的方法,而这些方法正是我们要测试的方法,Junti测试其实采用的是断言的方式,只要我们在所有test开头中的方法对数据添加断言方法,同时提供很多断言的方法,
常用断言方法
|
assertEquals("失败提示信息","期望数据","测试数据")
|
断言获取数据是否与所期望的相等
|
assertNotNull("失败提示信息","测试数据")
|
断言获取数据不为null,否则提示错误
|
assertNull("失败提示信息","测试数据")
|
断言获取数据是为null,否则提示错误
|
assertTrue("失败提示信息",测试数据blooean值)
|
断言获取数据是否为ture,否则提示错误
|
fail("失败提示信息");
|
此方法一般放到异常处,遇到此方法,测试将停止!
|
assertSame("失败提示信息","期望数据","测试数据")
|
断言获取数据是否与所期望的相同
|
当我们写完所有方法策略后,JUnit测试如下图:
在方法页面中点击右键在“调试方式”或“运行方式”中点击“JUnit 测试”,就运行测试类!
在执行测试类时,执行的大概过程:
(1)先执行构造方法public OrgTypeDAOTest(String arg0) ;
(2)再执行初始化数据方法protected void setUp() ;
(3)再执行以test开头的测试方法;
(4)最后执行protected void tearDown()方法清理对象;
如果测试失败或者错误,将会显示一个红色的亮条;如果测试通过将显示绿色亮条;如下图
这样就把一个整个单元测试操作例子演示完成!
可能对于一个测试类中有多个方法要测试,对于后面看着的确有些困难,因此,我对上测试类进行简单的调整,如下代码:
import junit.framework.TestCase;
import junit.textui.TestRunner;
import com.zhjy.mock.SpringMock;
/** *//**
* 举例测试类
*/
public class OrgTypeDAOTest extends TestCase ...{ //(1)继承TestCase
//private OrgTypeDAO orgTypeDAO;
//private OrgTypeVO orgTypeVO;
//private String id ;
/** *//**
* 构造方法
* @param arg0
*/
public OrgTypeDAOTest(String arg0) ...{
super(arg0);
}
/**//* 初时化方法
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception ...{
super.setUp();
//测试初始话数据调用类 orgTypeDAO和 封装数据的对象orgTypeVO
}
/**//* 执行完清理方法
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception ...{
//清空 对象 ;==null
//orgTypeDAO =null;
//orgTypeVO =null;
super.tearDown();
}
/** *//**
* 主函数
* @param args
*/
public static void main(String[] args)...{
TestRunner.run(OrgTypeDAOTest.class);
}
/** *//**
* 测试方法
* Test method testOrgTypeInfo
*/
public void testOrgTypeInfo() ...{
//添加
String id = insertOrgTypeInfo();
//列表
orgTypeList();
//修改
updateOrgTypeInfo(id);
//查询
selectOrgTypeInfoById(id);
//校验
iExistOrgByOrgTypeId(id);
//测试是否重复数据方法(add)
isRepeatOrgTypeInfo(orgTypeVO.getName(),"");
//获取数据方法(根据名称)
selectOrgTypeIdByName(orgTypeVO.getName());
//删除
deleteOrgTypeInfo(id);
}
/**//*
*添加初始数据
*/
private void setOrgTypeVOAddInfo() ...{
orgTypeVO.setName("add中海测试");
orgTypeVO.setDescription("add中海测试");
orgTypeVO.setStatus("1");
}
/**//*
*添加初始数据
*/
private void setOrgTypeVOUpdateInfo() ...{
//orgTypeVO.setId(id);
orgTypeVO.setName("add中海测试");
orgTypeVO.setDescription("update中海测试");
orgTypeVO.setStatus("1");
}
/**//*
* 新增方法
* Test method for {@link OrgTypeDAO#insertOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)}.
*/
public String insertOrgTypeInfo() ...{
setOrgTypeVOAddInfo();
String id = null;
try...{
id = orgTypeDAO.insertOrgTypeInfo(orgTypeVO);
}catch(Exception e)...{
fail("添加通用组织机构失败!");
}
return id;
}
/**//*
* 更新方法
* Test method for {@link com.zhjy.mltx.dao.OrgTypeDAO#updateOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)}.
*/
public void updateOrgTypeInfo(String id) ...{
setOrgTypeVOUpdateInfo();
orgTypeVO.setId(id);
try...{
orgTypeDAO.updateOrgTypeInfo(orgTypeVO);
}catch(Exception e)...{
assertTrue("修改通用组织机构失败!", false);
}
//查询
orgTypeVO = orgTypeDAO.selectOrgTypeInfoById(id);
assertEquals("修改通用组织机构失败!", orgTypeVO.getDescription(), "update中海测试");
}
/**//*
* 获取数据方法(主健)
* Test method for {@link OrgTypeDAO#selectOrgTypeInfoById(java.lang.String)}.
*/
public void selectOrgTypeInfoById(String id) ...{
orgTypeVO = orgTypeDAO.selectOrgTypeInfoById(id);
assertTrue("无法查看一条通用机构名称信息!",orgTypeVO != null);
assertEquals("添加通用组织机构失败!", orgTypeVO.getName(), "add中海测试");
assertEquals("修改通用组织机构失败!", orgTypeVO.getDescription(), "update中海测试");
}
/**//*
* 测试此通用组织机构是否被引用
* Test method for {@link OrgTypeDAO#iExistOrgByOrgTypeId(java.lang.String)}.
*/
public void iExistOrgByOrgTypeId(String id) ...{
boolean isfalse;
try ...{
isfalse = this.orgTypeDAO.iExistOrgByOrgTypeId(id);
assertFalse("通用组织机构校验错误!",isfalse);
} catch (DataAccessException e) ...{
assertTrue("通用组织机构数据操作错误!!",false);
} catch (ObjectNotFoundException e) ...{
assertTrue("id is null!!",false);
}
}
/**//*
* 删除
* Test method for {@link OrgTypeDAO#deleteOrgTypeInfo(java.lang.String)}.
*/
public void deleteOrgTypeInfo(String id) ...{
this.orgTypeDAO.deleteOrgTypeInfo(id);
orgTypeVO = this.orgTypeDAO.selectOrgTypeInfoById(id);
assertNull("删除通用组织机构失败!", orgTypeVO);
}
/**//*
* 获取数据方法(根据名称)
* Test method for {@link OrgTypeDAO#selectOrgTypeIdByName(java.lang.String)}.
*/
public void selectOrgTypeIdByName(String name) ...{
String orgtypeid = orgTypeDAO.selectOrgTypeIdByName(name);
//assertEquals(orgtypeid, id);
assertNotNull("未查出来通用组织机构ID!",orgtypeid);
}
/**//*
* 测试是否重复数据方法
* Test method for {@link OrgTypeDAO#isRepeatOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)}.
*/
public void isRepeatOrgTypeInfo(String name,String id) ...{
//setOrgTypeVOUpdateInfo();
OrgTypeVO orgtypetest = new OrgTypeVO();
orgtypetest.setId(id);
orgtypetest.setName(name);
boolean isTrue = orgTypeDAO.isRepeatOrgTypeInfo(orgtypetest);
//assertEquals("通用组织机构错误数据",isTrue, false);
assertTrue("通用组织机构错误数据", isTrue);
}
/**//*
* 列表方法
* Test method for {@link com.zhjy.mltx.dao.OrgTypeDAO#orgTypeList()}.
*/
public void orgTypeList() ...{
List list = orgTypeDAO.orgTypeList();
assertNotNull("无法获取通用机构名称列表list is null!",list);
}
}
处理过程:
(1)把所有以test开头的方法中的方法名称前的test去掉(例如把testOrgTypeList()改为orgTypeList()方法);
(2)同时添加一个以test开头的方法,并调用测试方法;这样做主要是因为执行测试时JUnit(除本身特有的方法出外)只执行以test为开头的方法;
(3)同时大家注意到我还把测试初始数据放到两个private方法中private void setOrgTypeVOAddInfo()和private void setOrgTypeVOUpdateInfo()方法中供调用;