Не удалось выполнить DataJpaTest - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть spring-data-jpa хранилище с именем TagRepository.Моя spring-boot версия 2.1.2.Я использую H2-зависимость с областью выполнения и намереваюсь использовать ее как для тестирования приложений, так и для интеграции.Я хочу написать DataJpaTest для TagRepository.Я написал следующий код:

@RunWith(SpringRunner.class)
@EnableAutoConfiguration
@DataJpaTest
@ContextConfiguration(classes={TagRepository.class})
public class TagRepositoryTest {

    @Autowired
    private TestEntityManager testEntityManager;

    @Autowired
    private TagRepository tagRepository;

    @Test
    public void findByTagTest() {
        Tag tag = new Tag("java");
        testEntityManager.persistAndFlush(tag);

        Optional<Tag> optionalTag = tagRepository.findByTag(tag.getTag());
        if(!optionalTag.isPresent()) {
            fail("Tag not found hence test failed");
        }

        assertThat(optionalTag.get()).isEqualTo(tag);
    }
}

Однако, когда я выполняю тест, он говорит, что приложение не запустилось, и я получаю следующую ошибку:

Invalid bean definition with name 'tagRepository' defined in null: Cannot register bean definition [Root bean: class [org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] for bean 'tagRepository': There is already [Generic bean: class [com.upday.task.repository.TagRepository]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] bound.

The bean 'tagRepository', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

Сам класс теста находится впакет, отличный от репозитория jpa.

1 Ответ

0 голосов
/ 01 февраля 2019

Просто удалите

@ContextConfiguration(classes={TagRepository.class})

из своего теста.

Он предназначен для передачи пользовательского @Configuration не обычного компонента.

UPD : когда тест данных jpa и тестируемый репозиторий находятся в разных пакетах, пружинаБегун нуждался в небольшой подсказке, чтобы просканировать классы из другого места.Указание класса приложения с помощью

@ContextConfiguration(classes={SpringBootApplication.class})

расширит область сканирования компонента и позволит тестовой среде выбрать дополнительные компоненты.

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