如何在Spring中重用@MockBean定义?



是否有可能外部化@MockBean定义,并将它们与组合而不是继承结合起来?

因为我发现自己经常重复模拟定义,我宁愿能够加载/注入它们并在测试类之外定义它们。

的例子:

@SpringBootTest
public class Service1Test {
@MockBean
private Service1 service1;

@BeforeEach
public void mock() {
when(service1.call()).thenReturn(result1);
}
}
@SpringBootTest
public class Service2Test {
@MockBean
private Service2 service2;

@BeforeEach
public void mock() {
when(service2.call()).thenReturn(result2);
}
}
@SpringBootTest
public class Service3Test {
@MockBean
private Service1 service1;

@MockBean
private Service2 service2;

@BeforeEach
public void mock() {
when(service1.call()).thenReturn(result1);
when(service2.call()).thenReturn(result2);
}
}

我想以某种方式外部化模拟,这样我就可以加载它们了。伪代码如下:

public class MockService1 {
@MockBean
private Service1 service1;

@BeforeEach
public void mock() {
when(service1.call()).thenReturn(result1);
}
}
@SpringBootTest
@Import({MockService1.class, MockService2.class})
public class Service3Test {
}

是的,您可以通过使用外部配置类来实现它。例如:

@TestConfiguration
public class TestConfig {
@Bean
@Primary
public Foo foo() {
return mock(Foo.class); //you can use Mockito or a different approach 
here
}
@Bean
@Primary
public Bar bar() {
return mock(Foo.class); 
}
}
@Import(TestConfig.class)
public class MyTestClass {
@Autowire 
private Foo foo;
@Autowire
private Bar bar;  
}

最新更新