如何在 Spring boot 中加载单个 bean 进行测试而不加载整个上下文?

6 java spring spring-boot

我有一个依赖于 bean B 的 A 类(非常简单的 bean,只是一个要调用的时钟)。我想对A类进行单元测试,如何加载这个bean?@SpringBootTest 加载整个上下文。

Dmi*_*kov 9

您应该使用两个注释的组合:

\n
@ExtendWith(SpringExtension.class)\n@Import(\n        value = {\n                SomeSpringBean.class\n        }\n)\n
Run Code Online (Sandbox Code Playgroud)\n

\ n@Import你可以通过@Import放置任何spring bean(带有@Configuration或@Component等的类)\n要在此测试中模拟另一个bean,请使用@MockBean注释。 \n用法如下:

\n
@ExtendWith(SpringExtension.class)\n@Import(\n        value = {\n                SomeSpringBean.class\n        }\n)\nclass SomeSpringTest {\n\n    @MockBean\n    private MockedBean mock;\n\n    @Autowired\n    private SomeSpringBean bean;\n\n...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

在 javadoc 中查看更多内容:

\n

指示一个或多个要导入 \xe2\x80\x94 的组件类(通常为 @Configuration 类)。\n提供与 Spring XML 中的元素等效的功能。允许导入 @Configuration 类、ImportSelector 和 ImportBeanDefinitionRegistrar 实现,以及常规组件类(从 4.2 开始;类似于 AnnotationConfigApplicationContext.register)。\n应使用 @Autowired 注入来访问导入的 @Configuration 类中声明的 @Bean 定义。bean 本身可以自动装配,或者声明 bean 的配置类实例可以自动装配。后一种方法允许在 @Configuration 类方法之间进行显式的、IDE 友好的导航。

\n