[英]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.