2010-10-09 65 views
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有什麼功能?

感謝幫助我一起在我的思想......

回答