Не удалось автоматически подключить зависимость в тесте - PullRequest
0 голосов
/ 15 ноября 2018

Я бы хотел написать интеграционный тест Spring, чтобы убедиться, что @Autowired правильно собирает мои классы, но не удается.

Тестовый класс

@RunWith(SpringRunner.class)
@DataJpaTest
@EntityScan(basePackageClasses = {ClassUnderTest.class, SomRepository.class, SomeEntity.class})
public class ClassUnderTestIT{

    @Autowired private InterfaceUnderTest cut;

    @Test public void autowires() {
        assertThat(cut).isNotNull();
    }

}

Должен проверить, что это @Service autowires

@Service
@Transactional
public class ClassUnderTest implements InterfaceUnderTest {

    private final SomeRepository repository;

    @Autowired
    public DefaultWatchlistDataModifier(SomeRepository repository) {
        this.repository = repository;
    }

}

Уделение особого внимания проводной зависимости

@Repository
@Transactional(readOnly = true)
@Scope(value = BeanDefinition.SCOPE_PROTOTYPE)
public interface SomeRepository extends JpaRepository<SomeEntity, String> {
}

Тем не менее, все, что я когда-либо получаю, является исключением

org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type 'com.[...].InterfaceUnderTest' available:
expected at least 1 bean which qualifies as autowire candidate.
Dependency annotations: 
{@org.springframework.beans.factory.annotation.Autowired(required=true)}

Тем временем я экспериментировал со всеми видами дополнительных аннотаций, таких как @ComponentScan, @EnableJpaRepositories ... все, что я мог найти в бесконечном количестве вопросов StackOverflow по этой теме - все напрасно.

1 Ответ

0 голосов
/ 15 ноября 2018

Использование [@DataJpaTest] только загрузит JPA-часть вашего приложения Spring Boot. Поскольку модуль вашего теста не является частью этого подмножества, он не будет доступен в контексте приложения.

Либо создайте его самостоятельно и введите зависимости, либо используйте взамен полный @SpringBootTest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...