委托模拟以分隔 class
Delegate mocks to separate class
而不是这个:
@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
,因此我想将这些依赖项的初始化和具体模拟委托给另一个 class照顾那个。
您必须在 @ContextConfiguration
中为每个要使用它的测试指定提供者 class:
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = {Application.class}, webEnvironment = WebEnvironment.DEFINED_PORT)
@ContextConfiguration(classes = {MockProvider.class} // <-- this
public abstract class AbstractIT {
您必须确保对提供商进行配置 class:
@Configuration
public class MockProvider {
根据 @MockBean 文档:
The annotation can be used directly on test classes, on fields within
your test, or on @Configuration classes and fields.
而不是这个:
@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
,因此我想将这些依赖项的初始化和具体模拟委托给另一个 class照顾那个。
您必须在 @ContextConfiguration
中为每个要使用它的测试指定提供者 class:
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = {Application.class}, webEnvironment = WebEnvironment.DEFINED_PORT)
@ContextConfiguration(classes = {MockProvider.class} // <-- this
public abstract class AbstractIT {
您必须确保对提供商进行配置 class:
@Configuration
public class MockProvider {
根据 @MockBean 文档:
The annotation can be used directly on test classes, on fields within your test, or on @Configuration classes and fields.