在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类的话,它并不是很方便。

最佳答案

为什么您的@ComponentScan上有SpringBootApplication?这样做会覆盖应用到它的配置,包括在切片测试中自定义类路径扫描的过滤器。

有关更多详细信息,请参见the documentation

关于java - @DataJpaTest:如何停止加载不需要的@ConfigurationProperties,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59262201/

10-10 19:23