【问题标题】:Integration test values are inserted to database集成测试值插入数据库
【发布时间】: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


【解决方案1】:

我相信这是由于自动接线。当您自动连接时,它通过依赖注入实例化接口。如果您不想在运行测试时存储数据,我建议您查看mockito。在那里你可以模拟存储库,这样你就可以测试存储数据时使用的所有方法,但从不实际保存它

【讨论】:

  • 我不这么认为,如果你模拟存储库,你就会失去测试的目标。目标是测试存储库而不是模拟它。我会建议使用内存数据库。
  • @akuma8 但即使使用模拟,您仍然可以在 repo 中测试代码。
  • 当我们模拟我们可以影响一个方法的结果时,我们不再调用实际的方法实现。
  • 我不想使用内存数据库。我正在尝试将其连接到外部数据库。
  • @UserR 对不起,您想连接到数据库但不想保存所述文档?
【解决方案2】:

你可以试试用这个方言吗?

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

希望这应该可行。

【讨论】:

    猜你喜欢
    • 2018-08-21
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多