【问题标题】:Delegate mocks to separate class将模拟委托给单独的类
【发布时间】:2019-08-23 10:01:43
【问题描述】:

而不是这样:

@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,因此我想将这些依赖项的初始化和具体模拟委托给另一个负责处理的类。

【问题讨论】:

    标签: java spring mockito junit5 spring-boot-test


    【解决方案1】:

    您必须在 @ContextConfiguration 中为您要使用的每个测试指定该提供程序类:

    @ExtendWith(SpringExtension.class)
    @SpringBootTest(classes = {Application.class}, webEnvironment = WebEnvironment.DEFINED_PORT)
    @ContextConfiguration(classes = {MockProvider.class}  // <-- this
    public abstract class AbstractIT {
    

    您必须确保将提供程序设为配置类:

    @Configuration
    public class MockProvider {
    

    根据 @MockBean 文档:

    注解可以直接用在测试类的字段上 您的测试,或 @Configuration 类和字段。

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 2018-05-07
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 2010-10-05
      • 2013-07-18
      相关资源
      最近更新 更多