gpt4 book ai didi

java - EasyMock:部分模拟类

转载 作者:行者123 更新时间:2023-11-29 03:29:00 26 4
gpt4 key购买 nike

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

E.G.

给定对象

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

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

...
}

如果这被 mock 成这样

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

createShape() 等所有其他方法是否有效,还是您必须模拟所有要使用的方法?

最佳答案

简而言之,是的。

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

看起来您的示例使用的是已弃用的 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 方法。

希望对你有帮助

关于java - EasyMock:部分模拟类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19385924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com