【发布时间】:2020-10-07 16:25:35
【问题描述】:
我正在尝试使用 Spring Boot 集成测试来测试 JpaRepository。我正在使用没有嵌入式数据库的 @DataJPATest 注释。我正在使用与开发相同的 MySQL 数据库来运行集成测试。
@DataJpaTest
@AutoConfigureTestDatabase(replace = NONE)
class UserRepositoryTest {
@Autowired
UserRepository userRepository;
@Test
void findByUsername() {
User u = new User();
u.setUsername("ML");
u.setFirstname("Micheal");
u.setLastname("Lane");
u.setActive(true);
userRepository.save(u);
assertThat(userRepository.findByUsername("M21")).isNotNull();
}
}
我在测试中插入的值被插入到实际的数据库中。但我认为使用@DataJpaTest 事务会在测试结束时回滚。
默认情况下,使用 @DataJpaTest 注释的测试是事务性的,并在每个测试结束时回滚。他们还使用嵌入式内存数据库(替换任何显式或通常自动配置的数据源)。 @AutoConfigureTestDatabase 注解可用于覆盖这些设置。
那么为什么我的数据会保存到数据库中?是不是因为我没有使用嵌入式数据库?
使用方言:spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
**************************************************** ***********8
一旦我从测试方法中删除 findByUsername() 部分,它就开始回滚
User u = new User();
u.setUsername("ML");
u.setFirstname("Micheal");
u.setLastname("Lane");
u.setActive(true);
userRepository.save(u);
//assertThat(userRepository.findByUsername("M21")).isNotNull();
所以我猜它不起作用,因为有 2 个查询。我将不得不使用已保存的数据进行 findByUsername() 测试
【问题讨论】:
-
您使用的是哪种方言?您可以发布问题吗?也是春季版。
-
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
标签: spring-boot integration-testing