java - 如何在@SpringBootTest 中创建可重用的@MockBean 定义?

标签 java spring junit spring-boot-test

我有一个 @SpringBootTest具有相当复杂的模拟定义设置和模拟返回值的类。
问题:我可以外化@MockBean设置到自己的类中,因此我可以在多个类中重用模拟配置(旁注:我不是在这里寻找继承!)。

@SpringBootTest
public class ServiceTest extends DefaultTest {
    @Autowired
    private ServiceController controller;
    
    @MockBean
    private Service1 s1;
    
    @MockBean
    private Service2 s2;
    
    @MockBean
    private Service3 s3;
    
    //assume more complex mock definitions
    @BeforeEach
    public void mock() {
        when(s1.invoke()).thenReturn(result1);
        when(s2.invoke()).thenReturn(result2);
        when(s3.invoke()).thenReturn(result3);
    }
    
    @Test
    public void test() {
        //...
    }
}
我想相互独立地加载模拟,而不是全局加载我的所有测试。

最佳答案

不是直接要求的,但一种可能性是不使用 @MockBean而是将您的可重用模拟定义为 @Primary @Bean s 在多个 @TestConfiguration您可以选择性地@Import在您的测试中:

@TestConfiguration
public class MockService1 {

  @Bean
  @Primary
  public Service1 service1Mock() {
    Service1 s1 = Mockito.mock(Service1.class);
    when(s1.invoke()).thenReturn("result1");
    return s1;
  }
}
有一篇关于这种方法的好文章:Building Reusable Mock Modules with Spring Boot .

关于java - 如何在@SpringBootTest 中创建可重用的@MockBean 定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67054014/

相关文章:

java - 是否必须在 JBOSS AS 上将 RESTEasy 与 Spring 集成?

java - 如何模拟 CrudRepository 调用?

java - 事务的传播行为

java - 在 Eclipse 下使用 Maven 运行 JUnit 测试

java - JerseyTest 框架路径编码替换?与 %3F

java - 将不同的源目录映射到不同的测试子目录

java - 不使用JPA中的id进行检索

Java:If 构造中的初始化条件(性能)

java - Spring 测试因 NoClassDefFoundError 失败

java - 如何编写 Maven 构建脚本来执行 Java