SpringBoot中模拟多个bean

igr*_*igr 5 java testing spring mockito spring-boot

我在 SpringBoot 中有一个测试,应该以非常相同的方式检查多个 bean:

@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class EndpointsTest implements ApplicationContextAware {

    @MockBean
    ComponentA componentA;
    @MockBean
    ComponentB componentB;

...
Run Code Online (Sandbox Code Playgroud)

由于我不想为每个组件编写新的虚拟测试,因此我想获取所有 bean(因此使用ApplicationContextAware),然后对每个此类 bean 运行测试。

当然,这些豆子必须被嘲笑。

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

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

mer*_*ike 0

我相信你已经尝试过显而易见的事情了吗?

@Configuration
@MockBeans({YourComponentSuperclass.class})
public class TestConfig {
}
Run Code Online (Sandbox Code Playgroud)

如果这不起作用(例如因为 @MockBean 需要一个匹配的 bean 来装饰),您可以编写自己的BeanFactoryPostProcessor,可能受到 Spring 自己的启发MockitoPostProcessor(这可以@MockBean工作)。