gpt4 book ai didi

spring - junit 4 TransactionalTestExecutionListener 只为类中的所有测试插入一次测试数据?

转载 作者:行者123 更新时间:2023-12-03 17:08:49 28 4
gpt4 key购买 nike

我有一个测试 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 将数据加载到我的数据库中 - 创建类时一次。然后让类中的每个测试执行它需要对数据库执行的操作,然后回滚(不提交)它的更改。在每次测试之前从我的测试文件中重新插入所有相同的数据似乎有点过头了。有没有办法做到这一点?

或者

编写这些测试以在每次测试之前完全加载数据库的正确方法是什么?如果是这样, defaultRollback=true 在这种情况下有什么功能?

谢谢你帮助我思考...

最佳答案

您需要使用 TestExecutionListener并在 beforeTestClass 中设置您的数据库方法。见 Annotations section of the Testing chapter在 Spring 用户指南中。

关于spring - junit 4 TransactionalTestExecutionListener 只为类中的所有测试插入一次测试数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3897204/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com