当前位置: 首页 > 面试题库 >

使用@DataJpaTest进行的春季测试无法使用@Repository自动连接类(但可以使用接口存储库!)

子车灿
2023-03-14
问题内容

我试图理解为什么我不能自动装配类存储库,但可以自动装配 同一程序包 中的接口存储库以进行 相同的测试
。启动应用程序时,相同的存储库可以按预期工作。

一,错误:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.app.person.repository.PersonRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultPersonbleBeanFactory.raiseNoMatchingBeanFound(DefaultPersonbleBeanFactory.java:1493)
    at org.springframework.beans.factory.support.DefaultPersonbleBeanFactory.doResolveDependency(DefaultPersonbleBeanFactory.java:1104)
    at org.springframework.beans.factory.support.DefaultPersonbleBeanFactory.resolveDependency(DefaultPersonbleBeanFactory.java:1066)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
    ... 28 more

我有一个非常简单的例子。考试:

@RunWith(SpringRunner.class)
@DataJpaTest
public class PersonRepositoryTest {

    @Autowired
    private PersonRepository personRepository; // fail...

    @Autowired
    private PersonCrudRepository personCrudRepository; // works!

    @Test
    public void findOne() {
    }
}

存储库类:

@Repository
public class PersonRepository {
    //code
}

存储库接口:

@Repository
public interface PersonCrudRepository extends CrudRepository<Person, Long> {
}

在经历了与此相同的错误的糟糕经历之后,我试图在我的配置中找到一些详细信息,或者测试导致此问题的原因。另一种可能性是@DataJpaTest不支持类存储库。


问题答案:

我认为我对这个问题是正确的。找到有关Github的帖子并阅读Spring文档后:

如果要测试JPA应用程序,可以使用@DataJpaTest。默认情况下,它将配置一个内存嵌入式数据库,扫描@Entity类并配置Spring Data
JPA存储库。常规@Component bean将不会加载到ApplicationContext中。

PersonRepository被认为是常规的@Component,因为它不是Spring Data JPA存储库(接口是)。因此,它没有被加载。

另一种解决方案是使用@SpringBootTest而不是@DataJpaTest

这种解决方案的缺点是,它将在运行测试时加载 所有 上下文,并因此禁用测试切片。但是做吧。

仍在使用的另一个选项@DataJpaTest是包括@Repository过滤器注释,如下所示:

@DataJpaTest(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Repository.class))


 类似资料:
  • 我试图理解为什么我不能自动生成一个类存储库,但我可以在同一个包中自动生成一个接口存储库,用于同一个测试。当我启动应用程序时,相同的存储库按预期工作。 存储库接口: 在经历了一次同样的错误后,我试图在配置中找到一些细节,或者测试是什么导致了这个问题。另一种可能是不支持类存储库。

  • 我正在运行Spring Boot2.0.1和JUnit5。我正在尝试在集成测试中获取端口。但是,端口值始终为零。我不确定是什么引起的。我尝试将web环境枚举更改为随机端口,但似乎没有任何工作。 下面是pom(注意:仅显示依赖项) 应用程序.属性

  • 我正在开发一个spring boot应用程序,我遇到了一个问题。我正在尝试注入一个@Repository注释接口,但它似乎根本不起作用。我收到这个错误 实体类: 存储库接口: 控制器:

  • 我正在为我的应用程序使用模拟存储库 以下是服务的外观片段: 以下是存储库代码: 当我使用执行main()时,它工作正常。 但是,当我想运行测试类: 它会因以下stacktrace而失败: 原因:org。springframework。豆。工厂NoSuchBean定义异常:没有类型为“edu”的合格bean。勒勒亚克。存储库。WeatherStationRepositoryMock’可用:至少需要1

  • 问题内容: 我是Spring Boot的新手,并且想自动连接来自Rest Controller中不同软件包的存储库。看来,当我将接口和实现放在不同的程序包中时,实际的控制器似乎自动接线失败了。 由以下原因引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[com.acme.repository.Raw

  • 自动化测试将被用于进一步的任务中,并且还将被广泛应用在实际项目中。 为什么我们需要测试? 当我们在写一个函数时,我们通常可以想象出它应该做什么:哪些参数会给出哪些结果。 在开发期间,我们可以通过运行程序来检查它并将结果与预期进行比较。例如,我们可以在控制台中这么做。 如果出了问题 —— 那么我们会修复代码,然后再一次运行并检查结果 —— 直到它工作为止。 但这样的手动“重新运行”是不完美的。 当通