我在 SpringBoot 中有一个测试,它应该以完全相同的方式检查多个 bean:
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class EndpointsTest implements ApplicationContextAware {
@MockBean
ComponentA componentA;
@MockBean
ComponentB componentB;
...
由于我不想为每个组件编写一个新的虚拟测试,所以我应该获取所有 bean(因此使用 ApplicationContextAware
(,然后在每个这样的 bean 上运行测试。
当然,这些豆子必须被嘲笑。
有没有办法像MockBean
注释那样手动模拟 bean 并将其替换为 Spring 上下文?我还想删除所有组件的显式声明(数量不小(,只是为了嘲笑。
编辑:我想避免手动编写测试类中的所有组件。组件 bean 是按照约定命名的,所以我想将它们全部获取,应用模拟并运行测试。我们有100+组件。
我相信你已经尝试过显而易见的了?
@Configuration
@MockBeans({YourComponentSuperclass.class})
public class TestConfig {
}
如果这不起作用(例如@MockBean期望一个匹配的 bean 来装饰(,你可以写你自己的BeanFactoryPostProcessor
,可能受到 Spring 自己的MockitoPostProcessor
的启发(这使得@MockBean
起作用(。