当前位置: 首页 > 知识库问答 >
问题:

使用Spring测试在测试内回滚事务

阚亮
2023-03-14
    @RunWith(SpringJUnit4ClassRunner.class)
    @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
    @ContextHierarchy({
            @ContextConfiguration(locations = {
                    "classpath:/META-INF/spring/jpa-persistence-context.xml"})
    })
    @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = RuntimeException.class)
    public class FeaturedGroupRepositoryTest2 {

        @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = RuntimeException.class)
        @Test
        public void testFeaturedGroupDao() {

            FeaturedGroupEntity newFeaturedGroupEntity = new FeaturedGroupEntity();
            FeaturedGroupEntity savedFeaturedGroupEntity = featuredGroupRepository.save(newFeaturedGroupEntity);
            FeaturedGroupEntity foundFeaturedGroupEntity = featuredGroupRepository.findOne(savedFeaturedGroupEntity.getId());
            throw new RuntimeException("test rollback");
    }
}

共有1个答案

微生乐
2023-03-14

可能与@Kieren Dixon在JUnit中使用Spring测试服务时如何回滚数据库事务的问题相同吗?您缺少Junit类上的TransactionalTestExecutionListener注释:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfiguration.class)
@TestExecutionListeners({TransactionalTestExecutionListener.class}) 
public class WorkUnitRepoTest {

    @Inject MyRepo repo;

    @Test
    public void test() {
        repo.delete(1);
    }
}

尽管4.1.7的Spring文档提到监听器在默认情况下是活动的,但我必须手动添加它才能工作。然而,@Transactional无论在类还是方法级别都是必需的。

Spring Framework 4.1.7.发行版:

 类似资料:
  • 我正在努力做一个工作junit测试,以回滚在骆驼路由过程中发生的操作。 我有一个骆驼路线设置,可以监听目录。它需要一个csv文件。当csv文件出现时,它会创建新的SearchAnalytics数据。它会在csv文件中的每一行向表中添加新行。 我放的默认的Spring事务方法似乎不适用于骆驼路由上发生的操作。 下面的代码可以工作。但是它会永久保存数据,并且不会回滚插入。这意味着测试只会通过一次,除非

  • 迁移工作得很好,但事务根本不起作用。 我尝试公开我的设置: 运行在docker容器中的MariaDB 10.1(我已经证明了测试中使用的所有表都在InnoDB中,因此支持事务处理) 基测试类正在使用 我尝试了一个单独的连接与一起进行测试,并使用默认连接进行测试。事务也不起作用

  • 问题内容: 我正在运行一个简单的JUnit测试,又是一个应用程序DAO。问题是我总是得到: JUnit测试是: 如你所见,我明确声明不回滚此方法。 Spring JUnit支持是否总是将rollback设置为true? 问题答案: 它应该可以正常工作,就像你期望的那样,但是可能是你在被测类中打开了另一个事务,或者某个地方有其他功能/或错误。 顺便说一句,这个注释应该是足够的:

  • 测试将创建的数据保存在H2测试数据库中,随后的测试在测试套件中执行时将失败。 我如何用事务绕过类的所有测试,并在类的所有测试执行后回滚所有数据库修改?

  • 我将此文档用于集成测试:ASP.NET核心集成测试,这是我的简化集成测试: 正如您所看到的,我正在向“/API/v1/application/acceptoffer”API发送一个HTTP请求,该API更新数据库中的一些实体,如果一切正常,则返回状态代码200。 一个解决方案是使用DbContext的单例,然后将所有测试包装在事务中,但问题是SQL不支持嵌套事务,如果API也使用事务,它将引发运行

  • 问题内容: 我测试我的DAO和服务没有问题,但是当我测试s或s时,我想回滚事务并且不影响我的数据库。 我正在使用我的服务来管理交易。我想知道,是否有可能知道交易是否正常,但是回滚它以防止更改数据库? 这是我的测试: 问题在于该测试将失败,因为事务已回滚,但是插入正常!如果删除,则测试通过,但新记录将插入数据库。 现在可以正确测试通过,但是回滚将被忽略,并且记录将插入到数据库中。显然,我已经在myS