2010-10-09 20 views
4

J'ai une classe de test junit 4 testant un DAO. test unitairejunit 4 TransactionalTestExecutionListener insérer les données de test une seule fois pour tous les tests en classe?

:

@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 
} 

La méthode @BeforeTransacation fonctionne avant chaque méthode d'essai. Ce que je voudrais faire est: utiliser mon DbUnitInitializer pour charger des données dans ma base de données - UNE FOIS lorsque la classe est créée. Ensuite, faites en sorte que chaque test de la classe fasse ce qu'il doit faire avec la base de données, puis annulez (pas commit) les changements. Il semble plus de tuer pour ré-insérer toutes les mêmes données de mes fichiers de test avant chaque test. Y a-t-il un moyen d'accomplir cela?

ou

Est-ce le bon façon d'écrire ces tests pour charger complètement la base de données avant chaque test? Si oui, quelle est la fonction de defaultRollback = true dans cette situation?

merci de me guider tout au long de ma pensée ...

Répondre