Я бы хотел написать интеграционный тест 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 по этой теме - все напрасно.