测试类 EmployeeSessionFacadeTest,需要扩展DBUnit的基础类DatabaseTestCase并且必须提供对getConnection()和getDataSet()方法的实现,在getConnection()方法中将获得与EJB容器初始化时一样的数据库实例,getDataSet()方法负责读取上面提及的employee_hr_seed.xml文件的数据。
测试方法相当简单,因为DBUnit已经为我们处理了复杂的数据库生命周期任务。为了测试getEmployeeBySocialSecNum()方法,只需要简单的传递一个存在于种子文件中的社保代码号即可,比如
"333-29-9999".
//译者注:EmployeeFacade 类型对象,译者认为是代表底层数据库数据的映射体
public void testFindBySSN() throws Exception{
EmployeeFacade facade = //obtain somehow
EmployeeValueObject vo =
facade.getEmployeeBySocialSecNum("333-29-9999");
TestCase.assertNotNull("vo shouldn't be null", vo);
TestCase.assertEquals("should be Drew",
"Drew", vo.getFirstName());
TestCase.assertEquals("should be Smith",
"Smith", vo.getLastName());
}
为了确保操作周期中的创建职员方法createEmployee()没有问题,我们只需简单的执行一下这个方法,然后校验一下看有没有异常抛出,另外,下一步我们要做的是在这条新增的记录上进行查找操作,看是否可以找到刚创建的记录。
完整实例:
使用dbunit,可以帮助我们在测试中维护数据,也可以辅助我们的测试。
首先当然是下载dbunit, http://dbunit.sourceforge.net
我测试用的是 MYSQL 5.0 。
建立数据库:
create table test1(
id int not null auto_increment,
user_name varchar(50),
primary key(id)) engine=innodb;
保存数据的xml文件:
<dataset>
<test1 user_name="tom"/>
<test1 user_name="John"/>
<test1 user_name="Rose"/>
</dataset>
<dataset>
<test1 user_name="tom"/>
<test1 user_name="John"/>
<test1 user_name="Rose"/>
</dataset>
首先建立一个 JunitTest 的类:
public class Test2 extends TestCase {
protected void setUp() throws Exception { }
protected void tearDown() throws Exception { }
}
public class Test2 extends TestCase {
protected void setUp() throws Exception {}
protected void tearDown() throws Exception {}
}