单元测试存储库spring org.springframework.beans.factory.UnsatisfiedDependencyException

时间:2018-12-11 09:45:54

标签: java spring mongodb junit

  1. 我正在使用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)}
    
  2. 我的课程如下:

  3. 存储库:

    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);
    
    }
    
  4. 服务:

    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";
    }
    

    }

  5. 单元测试:

    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());
    }
    

1 个答案:

答案 0 :(得分:0)

之所以发生这种情况,是因为您在错误的位置使用了@ComponentScan

通常在主应用程序类或配置类中而不是在定义bean的地方使用它。

请参考以下链接:https://springframework.guru/spring-component-scan/

这里有一个类似的问题,您可以在主应用程序中使用@ComponentScan来看到它们

How to use @ComponentScan together with test-specific ContextConfigurations in SpringJunit4TestRunner?

相关问题