java - 单元测试存储库spring org.springframework.beans.factory.UnsatisfiedDependencyException
问题描述
我正在使用 Spring Boot 和 MongoDB 创建一个简单的学校应用程序。我想测试服务类中定义的方法,但出现以下异常:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name'com.backintime.BackInTimeSpring.Service.TeacherServiceTest': Unsatisfied dependency expressed through field 'teacherService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.backintime.BackInTimeSpring.Service.TeacherService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我的课程如下:
存储库:
package com.backintime.BackInTimeSpring.Model.Repository; @Component @Repository public interface ITeacherRepository extends MongoRepository<Teacher,String> { @Query("{}") Stream<Teacher> findAllTeachers(); List<Teacher> findByLastNameIgnoreCase(String lastName); List<Teacher> findByFirstNameIgnoreCase(String firstName); }
服务:
package com.backintime.BackInTimeSpring.Service; @Component @Service public class TeacherService { @Autowired private ITeacherRepository teacherRepository; public List<Teacher> retrieveAllTeachers(){ return this.teacherRepository.findAllTeachers().sorted(Comparator.comparing(Teacher::getLastName)).collect(Collectors.toList()); } public Teacher retrieveTeachersById(String id) { return this.teacherRepository.findAllTeachers().filter(t -> t.getId().equals(id)).findFirst().get(); } public List<Teacher> retrieveTeachersByLastName(String lastName){ return this.teacherRepository.findByLastNameIgnoreCase(lastName); } public List<Teacher> retrieveTeachersByFirstName(String firstName){ return this.teacherRepository.findByFirstNameIgnoreCase(firstName); } public void saveTeacher(Teacher t){ this.teacherRepository.save(t); } public String greet() { return "Hello World"; }
}
单元测试:
package com.backintime.BackInTimeSpring.Service; @RunWith(SpringRunner.class) @ComponentScan(basePackages = "com.backintime.BackInTimeSpring") public class TeacherServiceTest { @Autowired TeacherService teacherService; @Test public void retrieveAllTeachers() { assertEquals(3, teacherService.retrieveAllTeachers().size()); }
解决方案
发生这种情况是因为您@ComponentScan
在错误的地方使用。
通常它用于您的主应用程序类或配置类中,而不是您定义 bean 的地方。
请参考此链接:https ://springframework.guru/spring-component-scan/
这里有一个类似的问题,你可以看到它们也在@ComponentScan
主应用程序中使用
如何在 SpringJunit4TestRunner 中将 @ComponentScan 与特定于测试的 ContextConfigurations 一起使用?
推荐阅读
- c# - MailBee Imap.Connect 引发算术运算导致溢出错误
- odoo - Odoo 14 CE 中的可选依赖项
- php - 为什么无法将二维码图像保存到服务器的文件夹中?
- vue.js - 无法解析模块说明符“@vue/composition-api”。相对引用必须以“/”、“./”或“../”开头
- python - 熊猫没有将两个不同的列信息匹配在一起
- node.js - 在猫鼬中找到所有
- c# - EF Core 调用具有多个连接的存储过程并映射相关数据
- apache-spark - 为什么 Spark 结构化流 org.apache.spark.sql.functions.input_file_name 返回空白文件名
- laravel - Laravel 8 从下到上的路线顺序
- sql - 关联没有重复结果的三列查询