Тест 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);