對DAO編寫單元測試[4]
public abstract class TransactionCallback {
public final Object execute() throws Exception {
Transaction tx = HibernateUtil.getCurrentSession().beginTransaction();
try {
Object r = doInTransaction();
tx.commit();
return r;
}
catch(Exception e) {
tx.rollback();
throw e;
}
}
// 模板方法:
protected abstract Object doInTransaction() throws Exception;
}
其原理是使用JDK提供的動態代理。由于JDK的動態代理只能對接口代理,因此,要求DAO組件必須實現接口。如果只有具體的實現類,則只能考慮CGLIB之類的第三方庫,在此我們不作更多討論。
下面我們需要編寫DatabaseFixture,負責啟動HSQLDB數據庫,并在@Before方法中初始化數據庫表。該DatabaseFixture可以在所有的DAO組件的單元測試類中復用:
public class DatabaseFixture {
private static Server server = null; // 持有HSQLDB的實例
private static final String DATABASE_NAME = "javaeedev"; // 數據庫名稱
private static final String SCHEMA_FILE = "schema.sql"; // 數據庫初始化腳本
private static final List
@BeforeClass // 啟動HSQLDB數據庫
public static void startDatabase() throws Exception {
if(server!=null)
文章來源于領測軟件測試網 http://www.kjueaiud.com/