Springboot 2.0 JUnit测试@事务回滚不起作用

时间:2018-07-17 09:04:57

标签: spring-boot junit hikaricp

我将一些项目从Springboot 1.5.10迁移到2.0

Springboot 2.0.3ReleaseJDK10mysqlhikari-cp

完成此工作后,在JUnit test中,测试用例中的所有数据都保留在数据库中。我认为它不起作用@Tranactional-org.springframework.transaction.annotation.Transactional

这里是application.yml和测试班的一部分。

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: none
    database: mysql
    database-platform: org.hibernate.dialect.MySQL5Dialect

这里是数据源。

@Configuration
@EnableTransactionManagement
public class DatasourceJPAConfig {

    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }
}

这是JUnit测试类的一部分。

@Transactional
@Rollback(true)
@RunWith(SpringRunner.class)
@ActiveProfiles("local")
@SpringBootTest
public class RepoTests {

     @Autowired
     private TestRepository testRepository;

     @Test
     public void saveTest() {
         var name = "test";
         var description = "test description"

         var item = TestDomain.builder()
             .name(name)
             .description(description)
             .build();

         testRepository.save(item);

         var optional = testRepository.findById(item.getId());

         assertTrue(optional.isPresent());
         assertEquals(optional.get().getDescription(), description);
         assertEquals(optional.get().getName(), name);
     }
}

运行saveTest方法之后,在数据库中增加1行。

1 个答案:

答案 0 :(得分:0)

添加数据源进行测试,将set auto commit 设置为false

 @Autowired
 private DataSource dataSource;

内部测试

  ((HikariDataSource)dataSource).setAutoCommit(false);