下面的代码显示了在类Sub
中测试的方法 - 因此
我不需要嘲笑班级Sub
。但是,我想嘲笑
Super
类和getSuperData
方法。有没有办法使用
的Mockito / Powermock?
我也想知道是否有嘲弄Super
构造函数的方法?
谢谢,
史蒂夫
public class Super {
private String data;
public Super() {
}
public String getSuperData() {
return data;
}
}
public class Sub extends Super {
Sub() {
super();
}
public String methodToTest() {
...
String data = getSuperData();
...
}
}
public class TestSub {
Sub sub = new Sub();
Super superMock = Mockito.mock(Super.class);
Mockito.when(superMock.getSuperData()).thenReturn("data");
}
答案 0 :(得分:0)
这是可能的,但它需要你监视你的对象:
public class TestSub {
Sub sub = Mockito.spy(Sub.class);
Mockito.when(superMock.getSuperData()).thenReturn("data");
sub.methodToTest();
}
这样你就嘲笑了超级方法,因为间谍允许你模拟方法。然而,间谍的优势在于,对于未模拟的方法,它将调用真正的实现。因此sub.methodToTest()
调用仍然会调用实际的实现。
关于你的第二个子问题,我知道PowerMock能够模拟一个构造函数,但我不确定在这种情况下它是否可行。如果你想在构造函数中模拟某些语句,最好将它们委托给一个新方法,然后模拟这个方法。