Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring引导集成测试回滚不起作用_Java_Spring_Spring Boot_Transactions_Integration Testing - Fatal编程技术网

Java Spring引导集成测试回滚不起作用

Java Spring引导集成测试回滚不起作用,java,spring,spring-boot,transactions,integration-testing,Java,Spring,Spring Boot,Transactions,Integration Testing,在SpringBoot中,我试图创建我的第一个事务性测试,但该测试不起作用 @TestPropertySource(locations = "classpath:test.properties") @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @RunWith(SpringJUnit4ClassRunner.class) //@RunWith(SpringRunner.class) @Tra

在SpringBoot中,我试图创建我的第一个事务性测试,但该测试不起作用

@TestPropertySource(locations = "classpath:test.properties")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringJUnit4ClassRunner.class)
//@RunWith(SpringRunner.class)
@Transactional
@TestExecutionListeners(
    mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS,
    listeners = {TransactionalTestExecutionListener.class}
)
public class IntegrationTests
{
    @Autowired
    TemperatureLogRepository temperatureLogRepository;

    @Test
    @SqlGroup({
        @Sql(
            executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD,
            config = @SqlConfig(transactionMode = ISOLATED),
            scripts = "classpath:sqls/insertRecords2.sql"
        )
    })
    public void firstRepoTest() throws SQLException
    {
        assertThat(temperatureLogRepository.getFullList().size()).isEqualByComparingTo(0);
    }
}
我知道SqlGroup是不必要的,但是会添加更多的文件

我现在有:

  • SQL文件执行良好,并插入到数据库中
  • getFullList()
    方法可以读取它并返回正确的数据
  • 在测试之后,我仍然将数据保存在数据库中,事务没有回滚
  • 我不确定它们是否在同一个事务中运行。在
    getFullList()
    方法运行之前,是否可能将数据提交给数据库

    我需要的是:

  • @Sql
    将数据插入事务
  • getFullList()
    从事务中读取数据
  • 测试返回的数据
  • 回滚事务
  • 发件人:

    脚本执行阶段

    默认情况下,SQL脚本将在相应的测试之前执行 方法。但是,如果需要执行一组特定的脚本 试验方法之后 — 例如,清理数据库状态 — 这个 @Sql中的executionPhase属性可以如下所示使用 例子。请注意,隔离和后测试方法是静态的 分别从Sql.TransactionMode和Sql.ExecutionPhase导入

    相关问题:

    更新

    @Sql
    中删除
    @SqlConfig

    config = @SqlConfig(transactionMode = ISOLATED)
    
    或更改为:

    config = @SqlConfig(transactionMode = TransactionMode.INFERRED)
    
    SQL脚本在不回滚的单独事务中运行:

    org.springframework.test.context.jdbc.SqlConfig.TransactionMode.com

    指示SQL脚本应始终以新的方式执行, 将立即提交的独立事务


    我正在使用before阶段。查询运行良好。但是我不想在测试后运行任何东西,我需要一个简单的回滚。我不想在数据库中提交任何内容。我的问题是回滚,看起来我有一个事务提交。更新了答案。我已经尝试过了。在本例中,在测试之后,我在测试数据库中看不到任何内容,因此回滚很好,但我的repo无法读取事务。还有其他想法吗?:)你有什么例外吗?我尝试过类似的配置,但效果很好。也许您使用的数据源/DB配置不止一个?
    config = @SqlConfig(transactionMode = TransactionMode.INFERRED)