SpringBoot: тестирование сервиса с помощью инжектора зависимости конструктора - PullRequest
2 голосов
/ 03 октября 2019

У меня есть приложение SpringBoot (архитектура REST). У меня определена эта служба, использующая инъекцию зависимости конструктора

@Service
@Slf4j
public class HostelService {

    private final HostelRepository hostelRepository;

    HostelService(HostelRepository hostelRepository) {
        this.hostelRepository = hostelRepository;
    }
}

Я хочу использовать ее в интеграционном тесте:

@RunWith(SpringRunner.class)
@SpringBootTest
public class HostelServiceIntegrationTest {

    public static final String Hostel_1 = "Hostel::1";

    @Autowired
    protected HostelRepository hostelRepository;

    @Autowired
    private HostelService hostelService;


    //...
}

@Repository
public interface HostelRepository extends CouchbaseRepository<Hostel, String> {

}

но у меня есть эта ошибка:

..Unsatisfied dependency expressed through constructor parameter 0;

Причина:

org.springframework.beans.factory.NoSuchBeanDefinitionException: нетдоступен квалифицирующий компонент типа 'io.clouding.repository.HostelRepository': ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматической передачи. Аннотации зависимостей: {}

и в приложении:

@SpringCloudApplication
@SpringBootApplication
@EnableJpaRepositories("io.clouding.repository")
@ComponentScan(basePackages = { "io.clouding.repository" })
public class Application implements WebMvcConfigurer {
..
}

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Надеюсь, ваша проблема в том, что ваш бин HostelRespository не создается. И это CouchbaseRepository. Я надеюсь, что он даже не создан в не тестовой среде.

Что вам нужно сделать, это вместо из

@EnableJpaRepositories("io.clouding.repository")

add

@EnableCouchbaseRepositories(basePackages = {"io.clouding.repository"})

Это поможет во время выполнения создать компонент для вас. Так что ваша конкретная проблема будет решена.

Примечание :

Обратите внимание, что, если вы еще не настроили базовые конфигурации, необходимые для spring-data-couchbase, вы можете увидеть некоторые другие ошибки после исправления этого,что вы должны исправить с помощью конфигурации. Вы можете сослаться это .

0 голосов
/ 03 октября 2019

Ошибка говорит об этом, у вас, вероятно, есть RequestRepository, и ошибка находится внутри него;проверьте конструктор / зависимости в нем и посмотрите, не внедряется ли что-то или покажите RequestRepository и полную трассировку стека ошибок.

...