我正在使用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());
}
答案 0 :(得分:0)
之所以发生这种情况,是因为您在错误的位置使用了@ComponentScan
。
通常在主应用程序类或配置类中而不是在定义bean的地方使用它。
请参考以下链接:https://springframework.guru/spring-component-scan/
这里有一个类似的问题,您可以在主应用程序中使用@ComponentScan
来看到它们