所有未在模拟类上模拟的方法是否正常工作?
E.G。
给定对象
public class Shape {
public void createShape(...){
....
}
public void removeShape(...){
....
}
...
}
如果像
那样被嘲笑shape = createMock(Shape.class, new Method[]{Shape.class.getMethod("removeShape", new Class[]{...})});
像createShape()
这样的所有其他方法是否可行,或者您是否必须模拟您想要使用的所有方法?
答案 0 :(得分:4)
简而言之,是的。
Partial Mocks的工作方式与模拟类的实例完全相同,但是它们能够为您设置为模拟的方法添加期望值。 当你有一个重写方法也依赖于该方法的超类实现时,这通常很有用。
看起来您的示例使用了弃用的createMock(Class,Method ...)方法,因此我将提供一个示例,说明如何为Shape类创建部分模拟。
final IMockBuilder<Shape> mockBuilder = EasyMock.createMockBuilder(Shape.class);
mockBuilder.addMockedMethod(Shape.class.getMethod("removeShape", new Class[]{...}));
final Shape mockShape = mockBuilder.createMock();
这将提供一个行为完全正常的Shape对象,直到它尝试使用removeShape方法,它需要对行为有一些期望。
就个人而言,我很少使用带有Method参数的addMockedMethod版本。通常,我正在模拟的方法足以使用addMockedMethod(String)版本。所以我很可能会使用以下内容:
final IMockBuilder<Shape> mockBuilder = EasyMock.createMockBuilder(Shape.class);
mockBuilder.addMockedMethod("removeShape");
final Shape mockShape = mockBuilder.createMock();
这对我的眼睛来说有点清洁,并取得了相同的效果。
请记住,这些部分嘲讽遵守与嘲讽相同的法则。 所以你不能嘲笑这样的最终方法。
希望能帮助