Spring Boot 中所有 JUnit 测试的 Mock Bean
Mock Bean for all JUnit Tests in Spring Boot
在 Spring Boot 中,有没有办法为所有现有的 JUnit 测试模拟单个 bean,而不更改现有的测试 类(例如,通过添加注释或添加继承)?就像通过配置全局注入一个 bean。
假设您在主要源代码中使用 @SpringBootApplication
来定义 Spring 启动应用程序,您已经为该包中的所有内容(包括嵌套包)启用了组件扫描。
当运行测试时,src/test/java中的类(通常)也被添加到类路径中,因此也可以被扫描。
例如,如果您将 @SpringBootApplication
定义为 com.example.boot.MySpringBootApplication
,那么 com.example.boot.MyTestConfiguration
将有资格进行组件扫描,即使前者在 src/main 中并且后者在 src/test。将它放在 src/test/java 目录中将确保它仅在 运行 测试时有效。
然后您可以在该配置中定义您想要的任何“全局”bean。
使用我提供的 package/class 个名字:
// File: src/test/java/com/example/boot/MyTestConfiguration.java
@Configuration // this will get component-scanned
public class MyTestConfiguration {
@MockBean
MyBean myGlobalMockBean;
}
然后,只要您不从上下文配置中省略该配置,MockBean 就应该始终在测试中存在。
在 Spring Boot 中,有没有办法为所有现有的 JUnit 测试模拟单个 bean,而不更改现有的测试 类(例如,通过添加注释或添加继承)?就像通过配置全局注入一个 bean。
假设您在主要源代码中使用 @SpringBootApplication
来定义 Spring 启动应用程序,您已经为该包中的所有内容(包括嵌套包)启用了组件扫描。
当运行测试时,src/test/java中的类(通常)也被添加到类路径中,因此也可以被扫描。
例如,如果您将 @SpringBootApplication
定义为 com.example.boot.MySpringBootApplication
,那么 com.example.boot.MyTestConfiguration
将有资格进行组件扫描,即使前者在 src/main 中并且后者在 src/test。将它放在 src/test/java 目录中将确保它仅在 运行 测试时有效。
然后您可以在该配置中定义您想要的任何“全局”bean。
使用我提供的 package/class 个名字:
// File: src/test/java/com/example/boot/MyTestConfiguration.java
@Configuration // this will get component-scanned
public class MyTestConfiguration {
@MockBean
MyBean myGlobalMockBean;
}
然后,只要您不从上下文配置中省略该配置,MockBean 就应该始终在测试中存在。