#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)
}