У меня есть тестовый класс junit 4, тестирующий DAO.
модульный тест:
@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 имеет в этой ситуации?
спасибо за помощь в моих мыслях ...