java - Spring Boot 应用程序中的 JUnit 测试中没有用于 Autowiring JPA 存储库的合格 bean

标签 java spring-boot jpa junit h2

我有几个扩展JpaRepository的存储库。现在我想使用 H2 数据库的真实实例(不是内存中的 - 这样我可以使用 Web 控制台检查数据库)来测试我在单元测试中添加的自定义查询。

但是,在单元中自动连接存储库不起作用,我总是收到 NoSuchBeanDefinitionException: Noqualifying bean of type ... UserRepository available

下面列出了存储库和单元测试的代码。感谢您的帮助!

用户存储库

public interface UserRepository extends JpaRepository<User, Long> {}


用户存储库测试

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@ContextConfiguration(classes = TestConfiguration.class)
@Transactional
public class UserRepositoryTests {

    @Autowired
    private UserRepository userRepository;

    @Test
    @Commit
    public void test() throws AESEncryptionException {
        User user = new User().setFirstName("ABC").setLastName("XYZ");
        user = userRepository.save(user);
        assertNotNull(user.getId());
    }

}


测试配置

@Configuration
@EnableAutoConfiguration
@ComponentScan
@PropertySource("classpath:/application.properties")
public class TestConfiguration {}


应用程序属性

spring.datasource.url = jdbc:h2:file:./db/app-data
spring.datasource.driverClassName = org.h2.Driver
spring.jpa.database-platform = org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto = update
spring.h2.console.settings.web-allow-others = true

编辑: 正如 Mensur Qulami 所建议的,删除 @ContextConfiguration(classes = TestConfiguration.class) 就可以了,因为 @SpringBootTest 已经涵盖了这一点。

最佳答案

您可以将DataJpaTest@AutoConfigureTestDatabase(replace=Replace.NONE)结合使用来使用您的“真实”数据库

@RunWith(SpringRunner.class)
@DataJpaTest (showSql = true )
@AutoConfigureTestDatabase(replace=Replace.NONE)
public class UserRepositoryTests {

    @Autowired
    private UserRepository userRepository;

    ....

关于java - Spring Boot 应用程序中的 JUnit 测试中没有用于 Autowiring JPA 存储库的合格 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56868003/

相关文章:

java - 大型整数集的搜索和差异

java - Neo4j ResultConverter 接口(interface)的用法

java - 带 mvc 和自动配置的 Spring Boot

java - Spring 测试属性文件被主属性文件覆盖

java - 单个 DAO 和通用 CRUD 方法(JPA/Hibernate + Spring)

java - 错误: The type of the expression must be an array type but it resolved to boolean

java - 如何在 JSTL 函数/EL 中转义双引号?

java - 不写java代码,只用application.yml配置多个数据源是否适用

java - 使用不带 LoadTimeWeaving 的服务自定义 UserDetails

java - 指定要在 JPA 实体而不是类中使用的转换器的特定实例