我在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
起作用)。