Нет доступного компонента типа ‘mypackage.repository’: ожидается наличие как минимум 1 компонента, который соответствует требованиям autowire candidate

#spring-boot #junit4

#весенняя загрузка #junit4

Вопрос:

У меня есть тестовый класс в Junit4, который должен использовать NutrientListService.

 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ApplicationContext.class)
public class CalculationTests {

    private NutrientListService nutrientService;

    @Test
    public void someTest()
        Result re = Calculator.calculate(response, nutrientService)
}
  

Я получал nutrientService с нулевым значением, поэтому я попытался настроить ApplicationContext.

 @Configuration
@ComponentScan("myservice")
@ComponentScan("myrepository")
public class ApplicationContext {

    @Autowired
    NutrientListService nutrientService;
}
  

Однако я получаю

Error creating bean with name 'nutrientListService': Unsatisfied dependency expressed through field 'nutrientListRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'repositories.NutrientListRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

Это сервис:

 @Service
@Component
public class NutrientListService {
    @Autowired
    private NutrientListRepository repo;
}
  

И репозиторий:

 @Repository
public interface NutrientListRepository extends MongoRepository<MyClass, String> {

    MyClass findByID(String ID);
}
  

Есть идеи по правильному подключению сервиса? Мне нужно передать его для вычисления, поскольку это один из параметров. Должен ли я использовать класс контекста приложения или application-context.xml (который я не смог найти)? Какой был бы наименее непонятный способ сделать это? Я благодарю вас.

Ответ №1:

 @Configuration
@ComponentScan("myservice")
@ComponentScan("myrepository")
public class ApplicationContext {
    @Bean
    NutrientListService nutrientService(){
      new NutrientListService()
    }
}
  

А затем вызовите компонент с помощью @Autowired

 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ApplicationContext.class)
public class CalculationTests {

    @Autowired
    NutrientListService nutrientService

    @Test
    public void someTest()
        Result re = Calculator.calculate(response, nutrientService)
}