繁体   English   中英

Mockito-在构造函数中模拟方法调用

[英]Mockito - mock a method call in constructor

我有一个X类,它接收一个YBuilder并构造一个Y的实例

public class X {
  private Y y;
  public X(YBuilder builder) throws IOException{
    y = builder.build();
  }
}

我需要模拟所有对Y调用,因此我编写了这样的单元测试:

@Mock
private Y Y;

@Mock
private YBuilder builder;

@InjectMocks
private X x;

@Before
public void setup() {
  when(builder.build()).thenReturn(y); // this does not work
}

由于没有模拟依赖项Y所以在主类中收到了Null Pointer Exception

我认为这是由于@InjectMocks在我能够模拟调用之前实例化了X的新实例。

我怎样才能解决这个问题? 任何输入表示赞赏。

好的,好的-这里的问题是, when(builder.build()).thenReturn(y)之前,要在X的构造函数中调用代码y = builder.build()

您可以控制X类吗? 如果是这样,您是否可以在X中存储对构建器的引用,并在以后调用.build()

public class X {
    private YBuilder builder;
    public X(YBuilder builder) {
        this.builder = builder;
    }
}

否则,在setup()方法中手动初始化模拟可能最直接。

如果您认为正在发生什么,请使用代码进行证明。 您可以删除观察到的行为并自己构造X

@Before
public void setup() {
  when(builder.build()).thenReturn(y); // this does not work
  x = new X(builder);
}

如果这行得通,那么您已经确认了关注点,可以继续进行测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM