Spring junit 4 TransactionalTestExecutionListener是否只为类中的所有测试插入一次测试数据?
我有一个JUnit4测试类测试DAO 单元测试:Spring junit 4 TransactionalTestExecutionListener是否只为类中的所有测试插入一次测试数据?,spring,junit,junit4,Spring,Junit,Junit4,我有一个JUnit4测试类测试DAO 单元测试: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:/WEB-INF/applicationContext-db.xml", "classpath:/WEB-INF/applicationContext-hibernate.xml", "classpath:/WEB-INF/ap
@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
}
@beforetransation方法在每个测试方法之前运行。我想做的是:使用Dbunitializer将数据加载到数据库中—在创建类时加载一次。然后让类中的每个测试对数据库执行它需要执行的操作,然后回滚(而不是提交)它的更改。在每次测试之前,从我的测试文件中重新插入所有相同的数据,这似乎太过分了。有没有办法做到这一点
或
编写这些测试的正确方法是在每次测试之前完全加载数据库吗?如果是,在这种情况下defaultRollback=true有什么功能
谢谢你帮我思考 您需要使用
TestExecutionListener
并在beforeTestClass
方法中设置数据库。请参见《Spring用户指南》中的