1

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

例如

给定对象

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

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

    ...
}

如果这被嘲笑为

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

所有其他方法都可以createShape()工作吗?还是必须模拟出所有要使用的方法?

4

1 回答 1

4

简而言之,是的。

部分模拟的工作方式与模拟类的实例完全相同,但它们能够为您设置为模拟的方法添加期望。当您有一个也依赖于该方法的超类实现的覆盖方法时,这通常很有帮助。

看起来您的示例正在使用已弃用的 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();

这对我的眼睛来说更干净一些,并且达到了相同的效果。

但请记住,这些部分模拟与完全模拟遵循相同的规律。所以你不能像这样模拟 final 方法。

希望有帮助

于 2013-10-18T10:42:16.187 回答