JHipster编写测试用例遇@SpringBootConfiguration找不到异常求助
解决JHipster项目中@DataJpaTest找不到@SpringBootConfiguration的问题
这个异常的核心原因是:JHipster项目的主Spring Boot配置类(带@SpringBootApplication注解的类)通常位于项目根包下,而@DataJpaTest默认会扫描当前测试类所在包及其子包寻找@SpringBootConfiguration,如果测试类包路径与主配置类不匹配,或未明确指定配置类,就会触发该报错。
以下是几种可行的解决办法:
1. 对齐测试类与主应用类的包路径
确保RoleRepositoryTest所在的包,和项目主应用类(比如YourApplication.java)的包完全一致或是其子包。比如主类在com.yourcompany.yourapp,测试类就要放在com.yourcompany.yourapp或com.yourcompany.yourapp.repository这类子包下。
2. 显式指定主配置类
如果不想调整包结构,直接在测试类上添加@ContextConfiguration注解,指定项目的主Spring Boot配置类:
@DataJpaTest @AutoConfigureTestDatabase() @TestPropertySource(locations = "classpath:config/application-testdev.yml") @ContextConfiguration(classes = YourApplication.class) // 替换成你的主应用类名称 class RoleRepositoryTest { @Autowired private RoleRepository roleRepository; // ... 你的测试方法 }
3. 参考JHipster自动生成的测试类写法
JHipster自带的Repository测试类通常会包含额外配置,比如导入安全配置,你可以参考这种写法调整测试类:
@DataJpaTest @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) @TestPropertySource(locations = "classpath:config/application-testdev.yml") @Import(SecurityAutoConfiguration.class) class RoleRepositoryTest { @Autowired private RoleRepository roleRepository; @Test void shouldSaveAndRetrieveRole() { // given Role role = new Role("Parent","string",true,"1601", ACTIVE,"string",false); // when Role saved = roleRepository.save(role); // then assertThat(roleRepository.findById(saved.getId()).get()).isEqualTo(saved); assertThat(role).isNotNull(); assertThat(roleRepository.findAll()).hasSize(1); } }
额外注意事项
- 确认
application-testdev.yml文件确实存在于src/test/resources/config目录下(测试用配置建议放在test资源目录而非main) - 测试方法命名建议使用更具语义化的名称,比如
shouldSaveAndRetrieveRole,便于理解测试意图
内容的提问来源于stack exchange,提问作者Shivani
相关产品推荐
相关产品推荐

