4
我有一個測試DAO的junit 4測試類。junit 4 TransactionalTestExecutionListener只爲所有類的測試插入測試數據一次?
單元測試:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:/WEB-INF/applicationContext-db.xml",
"classpath:/WEB-INF/applicationContext-hibernate.xml",
"classpath:/WEB-INF/applicationContext.xml" })
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class})
@DataSetLocation("test/java/com/yada/yada/dao/dbunit-general.xml")
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback = true)
@Transactional
public class RealmDAOJU4Test {
@Autowired
private DbUnitInitializer dbUnitInitializer;
@Autowired
private RealmDAO realmDAO;
@BeforeTransaction
public void setupDatabase() {
// use dbUnitInitializer to insert test data
}
@Test
public void testGetById() {
Integer id = 2204;
Realm realm = realmDAO.get(id);
assertEquals(realm.getName().compareToIgnoreCase(
"South Technical Realm"), 0);
assertEquals(8, realm.getRealmRelationships().size());
}
// more test methods annotated here
}
的@BeforeTransacation方法每個測試方法之前運行。我想要做的是:使用我的DbUnitInitializer將數據加載到我的數據庫 - 一旦創建類時。然後讓這個類中的每個測試都做它需要做的事情,然後回滾(不提交)它的變化。在每次測試之前,重新插入來自我的測試文件的所有相同數據似乎過分了。有沒有辦法做到這一點?
或
是寫這些測試每次測試之前完全加載數據庫正確方法是什麼?如果是這樣,在這種情況下defaultRollback = true有什麼功能?
感謝幫助我一起在我的思想......