Java 将模拟委托给单独的类
而不是这样:Java 将模拟委托给单独的类,java,spring,mockito,junit5,spring-boot-test,Java,Spring,Mockito,Junit5,Spring Boot Test,而不是这样: @ExtendWith(SpringExtension.class) @SpringBootTest(classes = {Application.class}, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) public abstract class AbstractIT { @MockBean private FooAdapter fooAdapter; @MockBean
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = {Application.class}, webEnvironment =
SpringBootTest.WebEnvironment.DEFINED_PORT)
public abstract class AbstractIT {
@MockBean
private FooAdapter fooAdapter;
@MockBean
private BarAdapter barAdapter;
public void mockFoo() {
FooResponse dto = new FooResponse();
when(fooAdapter.fooRequest()).thenReturn(dto);
}
我想要:
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = {Application.class}, webEnvironment =
SpringBootTest.WebEnvironment.DEFINED_PORT)
public abstract class AbstractIT {
@MockBean/Autowired?
MockProvider mockProvider;
class MockProvider {
@MockBean
private FooAdapter fooAdapter;
@MockBean
private BarAdapter barAdapter;
public void mockFoo() {
FooResponse dto = new FooResponse();
when(fooAdapter.fooRequest()).thenReturn(dto);
}
然而,我不知道使用Mockito和
SpringRunner
是否可能。因为我们有很多适配器(比如10个),我不想太多地污染AbstractIT
,因此,我想将这些依赖项的初始化和具体模拟委托给另一个类来处理。您必须在@ContextConfiguration
中为每个要使用它的测试指定该提供程序类:
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = {Application.class}, webEnvironment = WebEnvironment.DEFINED_PORT)
@ContextConfiguration(classes = {MockProvider.class} // <-- this
public abstract class AbstractIT {
根据@MockBean文档:
注释可以直接用于测试类中的字段
您的测试,或在@Configuration类和字段上
@Configuration
public class MockProvider {