測(cè)試類 EmployeeSessionFacadeTest,需要擴(kuò)展DBUnit的基礎(chǔ)類DatabaseTestCase并且必須提供對(duì)getConnection()和getDataSet()方法的實(shí)現(xiàn),在getConnection()方法中將獲得與EJB容器初始化時(shí)一樣的數(shù)據(jù)庫(kù)實(shí)例,getDataSet()方法負(fù)責(zé)讀取上面提及的employee_hr_seed.xml文件的數(shù)據(jù)!
測(cè)試方法相當(dāng)簡(jiǎn)單,因?yàn)镈BUnit已經(jīng)為我們處理了復(fù)雜的數(shù)據(jù)庫(kù)生命周期任務(wù)。為了測(cè)試getEmployeeBySocialSecNum()方法,只需要簡(jiǎn)單的傳遞一個(gè)存在于種子文件中的社保代碼號(hào)即可,比如
"333-29-9999".
//譯者注:EmployeeFacade 類型對(duì)象,譯者認(rèn)為是代表底層數(shù)據(jù)庫(kù)數(shù)據(jù)的映射體
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());
}
為了確保操作周期中的創(chuàng)建職員方法createEmployee()沒有問題,我們只需簡(jiǎn)單的執(zhí)行一下這個(gè)方法,然后校驗(yàn)一下看有沒有異常拋出,另外,下一步我們要做的是在這條新增的記錄上進(jìn)行查找操作,看是否可以找到剛創(chuàng)建的記錄。
完整實(shí)例:
使用dbunit,可以幫助我們?cè)跍y(cè)試中維護(hù)數(shù)據(jù),也可以輔助我們的測(cè)試。
首先當(dāng)然是下載dbunit, http://dbunit.sourceforge.net
我測(cè)試用的是 MYSQL 5.0 。
建立數(shù)據(jù)庫(kù):
create table test1(
id int not null auto_increment,
user_name varchar(50),
primary key(id)) engine=innodb;
保存數(shù)據(jù)的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>
首先建立一個(gè) 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 {}
}