在没有 Spring 事务测试支持的情况下,如何编写 Junit4 测试?

发布于 2024-09-15 08:38:55 字数 327 浏览 5 评论 0原文

我想在我的应用程序服务中测试事务回滚。因此,我不想将 spring 的 AbstractTransactionalJUnit4SpringContextTests@Transactional 注释一起使用,因为它将我的测试方法包装在事务中。

我知道 spring 还提供 AbstractJUnit4SpringContextTests 用于无事务的测试。但是,我需要一些事务来将数据保存到数据库中,并在运行测试中的服务后查询数据以进行断言。

如果没有默认的事务测试管理,我如何编写 Junit 4 spring 事务测试?

I would like to test transaction rollbacks in my application service. As a result i do not want to use spring's AbstractTransactionalJUnit4SpringContextTests with the @Transactional annotation as that wraps my test method in a transaction.

I know spring also offers AbstractJUnit4SpringContextTests for tests without transactions. However i need to have some transactions to save data into my database and also query data for assertions after running the service under test.

How can i write a Junit 4 spring transactional test without the default transaction test management?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

朦胧时间 2024-09-22 08:38:55

这是您问题的答案;

@ContextConfiguration(value = "/applicationContext.xml")
public class JPASpringTest extends AbstractJUnit4SpringContextTests {
 @PersistenceContext(unitName="jpadenemelocal")
 EntityManager entityManager;

 @Autowired
 protected PlatformTransactionManager transactionManager;

 @Test
 public void testInsertRolManyToMany() {
 TransactionStatus status =  transactionManager.getTransaction(null);
 // your code   

 transactionManager.commit(status);
 }

}

Here is the answer to your question ;

@ContextConfiguration(value = "/applicationContext.xml")
public class JPASpringTest extends AbstractJUnit4SpringContextTests {
 @PersistenceContext(unitName="jpadenemelocal")
 EntityManager entityManager;

 @Autowired
 protected PlatformTransactionManager transactionManager;

 @Test
 public void testInsertRolManyToMany() {
 TransactionStatus status =  transactionManager.getTransaction(null);
 // your code   

 transactionManager.commit(status);
 }

}
橘香 2024-09-22 08:38:55

spring 文档应该在其 测试章节

您可能想要的是在没有默认 TransactionalTestExecutionListener 的情况下配置测试,如下所示

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,DirtiesContextTestExecutionListener.class})
public class SimpleTest {

    @Test
    public void testMethod() {
        // execute test logic...
   }
}

The spring docs should cover this in their testing chapter

What you might want is to configure your test without the default TransactionalTestExecutionListener like this

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,DirtiesContextTestExecutionListener.class})
public class SimpleTest {

    @Test
    public void testMethod() {
        // execute test logic...
   }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文