gpt4 book ai didi

spring - 无法执行 DataJpaTest

转载 作者:行者123 更新时间:2023-11-28 20:07:36 24 4
gpt4 key购买 nike

我有一个名为 TagRepositoryspring-data-jpa 存储库。我的 spring-boot 版本是 2.1.2。我在运行时范围内使用 H2 依赖项,我打算将它用于应用程序和集成测试。我想为 TagRepository 编写一个 DataJpaTest。我写了下面的代码:

@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 存储库不同的包中。

最佳答案

只需删除

@ContextConfiguration(classes={TagRepository.class})

来自你的测试。

它用于传递自定义 @Configuration 而不是常规 bean。

更新:当数据 jpa 测试和被测存储库位于不同的包中时,spring runner 需要一点提示来从另一个地方扫描类。通过

指出应用程序类
@ContextConfiguration(classes={SpringBootApplication.class})

将扩展组件扫描范围并允许测试环境获取额外的 bean。

关于spring - 无法执行 DataJpaTest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54481897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com