Java Spring Boot Test@MockBeans应该符合@ConditionalOnBean条件吗?

Java Spring Boot Test@MockBeans应该符合@ConditionalOnBean条件吗?,java,spring,spring-boot,spring-boot-starter,Java,Spring,Spring Boot,Spring Boot Starter,我有一个java@Configuration类,它带有一个FOO@Bean注释,带有@ConditionalOnBean(BAR.class)。因为我希望导入程序项目提供或不提供这个Bean,所以它不存在于我的项目中的任何地方 在我的集成测试中,我通过@MockBeans模拟Bar.class。但由于某种原因,Spring引导调试告诉我它没有找到它,所以我的条件bean没有被加载 我几乎可以肯定这种情况在过去已经正常工作了,但是我是否配置了其他配置?我无法使它工作 我发现手动将@Bean重新注册

我有一个java
@Configuration
类,它带有一个
FOO@Bean
注释,带有
@ConditionalOnBean(BAR.class)。
因为我希望导入程序项目提供或不提供这个Bean,所以它不存在于我的项目中的任何地方

在我的集成测试中,我通过
@MockBeans
模拟
Bar.class
。但由于某种原因,Spring引导调试告诉我它没有找到它,所以我的条件bean没有被加载

我几乎可以肯定这种情况在过去已经正常工作了,但是我是否配置了其他配置?我无法使它工作

我发现手动将@Bean重新注册到与条件配置相同的@Configuration中也看不到它!是否有任何已知的bug与他的相关

自动回复:本案的罪魁祸首是

您需要非常小心bean定义的顺序 添加,因为这些条件是根据已添加的内容进行评估的 到目前为止已经处理过了。因此,我们建议仅使用 @上的ConditionalOnBean和@ConditionalOnMissingBean注释 自动配置类(因为这些类保证在 已添加任何用户定义的bean定义)

p.S2>我意识到Bar.class是一个接口,但我不明白为什么只要存在一个实现它就不能工作


p.S3>我发现MockitoTestExecutionListener是在OnBeanConCondition类之后执行的。这似乎完全是我的问题。

这就是为什么不可能的原因:


不清楚,请您澄清“因为我希望导入者项目提供或不提供这个bean,所以它在我的项目中的任何地方都不存在。”@fg78nc我正在做一个初学者(因此是
@ConditionalOnBean
),所以根据BAR@bean是否存在,我将配置FOO。在引导的上下文中,我称之为“导入器”的东西有什么名字吗?不管它们当前是否应该有,如果我在测试中提供一个
@MockBean
,它应该触发自动配置条件,这对我来说是完全有意义的。我建议针对BOOT提交一个bug来描述这个案例。我在自动配置类中考虑了两个问题:sis
@ConditionalOnBean