EasyMock:部分嘲笑的课程

时间:2013-10-15 16:05:48

标签: java unit-testing easymock

所有未在模拟类上模拟的方法是否正常工作?

E.G。

给定对象

public class Shape {
    public void createShape(...){
        ....
    }

    public void removeShape(...){
        ....
    }

    ...
}

如果像

那样被嘲笑
shape = createMock(Shape.class, new Method[]{Shape.class.getMethod("removeShape", new Class[]{...})});

createShape()这样的所有其他方法是否可行,或者您是否必须模拟您想要使用的所有方法?

1 个答案:

答案 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();

这对我的眼睛来说有点清洁,并取得了相同的效果。

请记住,这些部分嘲讽遵守与嘲讽相同的法则。 所以你不能嘲笑这样的最终方法。

希望能帮助