簡體   English   中英

單元測試存儲庫spring org.springframework.beans.factory.UnsatisfiedDependencyException

[英]Unit testing repository spring org.springframework.beans.factory.UnsatisfiedDependencyException

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

這是由於您在錯誤的位置使用@ComponentScan而導致的。

通常在主應用程序類或配置類中而不是在定義Bean的地方使用它。

請參考此鏈接: https : //springframework.guru/spring-component-scan/

這里有一個類似的問題,您可以在Main應用程序中使用@ComponentScan看到它們

如何在SpringJunit4TestRunner中將@ComponentScan與測試特定的ContextConfiguration一起使用?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM