Open Session in Test 及自動Rollback
from: http://m.tkk7.com/rain1102/articles/117541.html
又是來自Spring這個(gè)神奇國度的東西, 你可以讓testCase繼承于AbstractTransactionalDataSourceSpringContextTests,就可以做到Open Session in Test ,解決Hibernate的lazy-load問題;而且接管原來的DAO里的事務(wù)控制定義,通過setDefaultRollback(boolean)方法控制最后回滾還是提交,如果默認(rèn)為回滾,則測試產(chǎn)生數(shù)據(jù)變動不會影響數(shù)據(jù)庫內(nèi)數(shù)據(jù)。
如果不能繼承于這個(gè)基類,可以自己簡單編寫,代碼是這樣的:
protected PlatformTransactionManager transactionManager;
protected TransactionStatus transactionStatus;
protected boolean defaultRollback = true;
public void setUp()
{
transactionManager = (PlatformTransactionManager) ctx.getBean("transactionManager");
transactionStatus = transactionManager.getTransaction(new DefaultTransactionDefinition());
}
public void tearDown()
{
if (defaultRollback)
transactionManager.rollback(this.transactionStatus);
else
transactionManager.commit(this.transactionStatus);
}
(注,hibernate太奸詐了,如果全部默認(rèn)回滾,只會在session里干活,一點(diǎn)不寫數(shù)據(jù)庫,達(dá)不到完全的測試效果。)
又是來自Spring這個(gè)神奇國度的東西, 你可以讓testCase繼承于AbstractTransactionalDataSourceSpringContextTests,就可以做到Open Session in Test ,解決Hibernate的lazy-load問題;而且接管原來的DAO里的事務(wù)控制定義,通過setDefaultRollback(boolean)方法控制最后回滾還是提交,如果默認(rèn)為回滾,則測試產(chǎn)生數(shù)據(jù)變動不會影響數(shù)據(jù)庫內(nèi)數(shù)據(jù)。
如果不能繼承于這個(gè)基類,可以自己簡單編寫,代碼是這樣的:
protected PlatformTransactionManager transactionManager;
protected TransactionStatus transactionStatus;
protected boolean defaultRollback = true;
public void setUp()
{
transactionManager = (PlatformTransactionManager) ctx.getBean("transactionManager");
transactionStatus = transactionManager.getTransaction(new DefaultTransactionDefinition());
}
public void tearDown()
{
if (defaultRollback)
transactionManager.rollback(this.transactionStatus);
else
transactionManager.commit(this.transactionStatus);
}
(注,hibernate太奸詐了,如果全部默認(rèn)回滾,只會在session里干活,一點(diǎn)不寫數(shù)據(jù)庫,達(dá)不到完全的測試效果。)
posted on 2007-10-29 16:00 空杯 閱讀(282) 評論(0) 編輯 收藏 所屬分類: Testing