Java EasyMock:部分模拟类

Java EasyMock:部分模拟类,java,unit-testing,easymock,Java,Unit Testing,Easymock,所有未在模拟类上模拟的方法是否正常工作 例如 给定对象 public class Shape { public void createShape(...){ .... } public void removeShape(...){ .... } ... } 如果这被嘲笑成 shape = createMock(Shape.class, new Method[]{Shape.class.getMethod("remove

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

例如

给定对象

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

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

    ...
}
如果这被嘲笑成

shape = createMock(Shape.class, new Method[]{Shape.class.getMethod("removeShape", new Class[]{...})});
所有其他方法,如
createShape()
都有效吗?还是必须模拟所有要使用的方法?

简言之,是的

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

看起来您的示例使用的是不推荐的createMock(Class,Method…)方法,因此我将提供一个示例,说明如何为Shape类创建部分mock

final IMockBuilder<Shape> mockBuilder = EasyMock.createMockBuilder(Shape.class);
mockBuilder.addMockedMethod(Shape.class.getMethod("removeShape", new Class[]{...}));
final Shape mockShape = mockBuilder.createMock();
final-IMockBuilder-mockBuilder=EasyMock.createMockBuilder(Shape.class);
addMockedMethod(Shape.class.getMethod(“removeShape”,新类[]{…}));
最终形状mockShape=mockBuilder.createMock();
这将提供一个行为完全正常的形状对象,直到它尝试使用removeShape方法,在该方法中,它将需要对该行为进行一些预期

就我个人而言,我很少使用接受方法参数的addMockedMethod版本。通常,我模拟的方法非常独特,可以使用addMockedMethod(String)版本。因此,我很可能会使用以下方法:

final IMockBuilder<Shape> mockBuilder = EasyMock.createMockBuilder(Shape.class);
mockBuilder.addMockedMethod("removeShape");
final Shape mockShape = mockBuilder.createMock();
final-IMockBuilder-mockBuilder=EasyMock.createMockBuilder(Shape.class);
mockBuilder.addMockedMethod(“removeShape”);
最终形状mockShape=mockBuilder.createMock();
这对我的眼睛来说有点干净,并且达到了同样的效果

但是请记住,这些部分模拟与完全模拟遵循相同的法则。 所以你不能模仿像这样的最终方法

希望这有帮助

简言之,是的

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

看起来您的示例使用的是不推荐的createMock(Class,Method…)方法,因此我将提供一个示例,说明如何为Shape类创建部分mock

final IMockBuilder<Shape> mockBuilder = EasyMock.createMockBuilder(Shape.class);
mockBuilder.addMockedMethod(Shape.class.getMethod("removeShape", new Class[]{...}));
final Shape mockShape = mockBuilder.createMock();
final-IMockBuilder-mockBuilder=EasyMock.createMockBuilder(Shape.class);
addMockedMethod(Shape.class.getMethod(“removeShape”,新类[]{…}));
最终形状mockShape=mockBuilder.createMock();
这将提供一个行为完全正常的形状对象,直到它尝试使用removeShape方法,在该方法中,它将需要对该行为进行一些预期

就我个人而言,我很少使用接受方法参数的addMockedMethod版本。通常,我模拟的方法非常独特,可以使用addMockedMethod(String)版本。因此,我很可能会使用以下方法:

final IMockBuilder<Shape> mockBuilder = EasyMock.createMockBuilder(Shape.class);
mockBuilder.addMockedMethod("removeShape");
final Shape mockShape = mockBuilder.createMock();
final-IMockBuilder-mockBuilder=EasyMock.createMockBuilder(Shape.class);
mockBuilder.addMockedMethod(“removeShape”);
最终形状mockShape=mockBuilder.createMock();
这对我的眼睛来说有点干净,并且达到了同样的效果

但是请记住,这些部分模拟与完全模拟遵循相同的法则。 所以你不能模仿像这样的最终方法


希望这能有所帮助

为什么不试试呢?我已经尝试过类似的方法,看起来不像所有其他方法都有效,但因为我只是在学习easymock框架,我不确定是否有可能以另一种方式实现这一点,或者如果我在示例中做了一些不正确的事情,为什么不试试呢?我已经尝试过类似的方法它看起来不像所有其他方法都能工作,但由于我只是学习easymock框架,我不确定是否有可能用另一种方法来实现这一点,或者我在我的示例中是否做了不正确的事情