我在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上运行测试。

当然,必须嘲笑这些bean。

有没有办法像MockBean注释那样手动模拟bean并将其替换为Spring上下文?我也想删除所有组件的显式声明(数量不小),仅出于模拟目的。

编辑:我想避免手动编写测试类中的所有组件。组件bean是按照约定命名的,因此我想全部获取它们,应用模拟并运行测试。我们有100多个组件。

最佳答案

我相信您尝试过显而易见的事情吗?

@Configuration
@MockBeans({YourComponentSuperclass.class})
public class TestConfig {
}


如果这不起作用(例如,因为@MockBean希望装饰单个匹配的bean),则可以编写自己的BeanFactoryPostProcessor,可能受Spring自己的MockitoPostProcessor的启发(使@MockBean起作用)。

09-27 23:24