Тест Springboot 2.0 JUnit @ Откат транзакции не работает

Я перенес некоторые проекты из Springboot 1.5.10 в 2.0,

Springboot 2.0.3Release, JDK10, mysql, hikari-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 ответ

Добавить источник данных для тестирования и установить автоматическое принятие на false

 @Autowired
 private DataSource dataSource;

И внутри теста

  ((HikariDataSource)dataSource).setAutoCommit(false);
Другие вопросы по тегам