我有一个测试DAO的junit 4测试类。
单元测试:
@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将数据加载到我的数据库中 - 在创建类时ONCE。然后让类中的每个测试执行它需要对数据库执行的操作,然后回滚(不提交)它的更改。在每次测试之前重新插入测试文件中的所有相同数据似乎过度杀戮。有没有办法实现这个目标?
或
是否正确方式编写这些测试以在每次测试之前完全加载数据库?如果是这样,defaultRollback = true在这种情况下有什么功能?
感谢您帮助我思考......
答案 0 :(得分:2)
您需要使用TestExecutionListener
并使用beforeTestClass
方法设置数据库。请参阅Spring用户指南中的Annotations section of the Testing chapter。