在 SpringBoot (2.2.1,2.2.2) 应用程序中,切片的 @DataJpaTest 不会运行,因为无法创建持有 @ConfigurationProperties 的 bean。
考试:
@DataJpaTest
public class FooCustomerServiceTest
{
@Autowired
FooCustomerRepository repo;
@Test
void findAll()
{
repo.findAll();
}
}
当我尝试运行测试时,我得到一个
没有可用的“foo.appconfig.AppInfoConfig”类型的合格 bean
foo.appconfig.AppInfoConfig
@ConfigurationProperties(prefix = "app.info")
public class AppInfoConfig
{
private String name;
...
}
@Component
它被与测试无关的人引用。
使用foo.Application
的没有特殊注释
@SpringBootApplication
@ComponentScan
@ConfigurationPropertiesScan
public class Application
{
public static void main( final String[] args )
{
SpringApplication.run( Application.class, args );
}
}
由于切片测试仅扫描某些组件(@DataJpaTest 的情况下为 @Entity 和 @Repository),因此不扫描“AppInfoConfig”。没关系,但是为什么要尝试将其注入到另一个既不是实体也不是存储库的控制器中?
如何启用 AppInfoConfig 的正确创建或完全禁用创建?
注意:@TestConfiguration
有一个@Bean
方法确实有效,但如果你有很多这些@ConfigurationProperties
类,它就不是很方便。