[英]Final class and Final method - Mocking with Mockito 2
Mockito 2 提供的功能是使用 org.mockito.plugins.MockMaker(mock-maker-inline) 来模拟最终方法和最终类,通常可用(已发布)或仍处于孵化阶段。 我在我的应用程序中使用了 mockito-core-2.23.4 工件。 mocking 最终类和方法中需要建议。 是否建议使用这种方法或寻找替代选项?
从 Mockito 2.x 开始,Mockito 现在支持最终类和方法的 mocking。
例子:
假设我们有一个如下所示的MyList
class 作为测试用例中的协作者。
我们将为这个 class 添加一个新的finalMethod
:
public class MyList extends AbstractList {
final public int finalMethod() {
return 0;
}
}
我们还将使用最终子类对其进行扩展:
public final class FinalList extends MyList {
@Override
public int size() {
return 1;
}
}
在 Mockito 可以用于 mocking 最终类和方法之前,需要对其进行配置。
我们需要在项目的 src/test/resources/mockito-extensions 目录中添加一个名为 org.mockito.plugins.MockMaker 的文本文件并添加一行文本:
模拟机内联
Mockito 在加载时检查配置文件的扩展目录。 此文件启用最终方法和类的 mocking。
模拟最终方法:
正确配置 Mockito 后,可以像其他任何方法一样模拟最终方法:
@Test
public void whenMockFinalMethodMockWorks() {
MyList myList = new MyList();
MyList mock = mock(MyList.class);
when(mock.finalMethod()).thenReturn(1);
assertNotEquals(mock.finalMethod(), myList.finalMethod());
}
通过创建 MyList 的具体实例和模拟实例,我们可以比较两个版本的finalMethod()
返回的值并验证是否调用了模拟。
模拟最终 Class:
Mocking 最终 class 与 mocking 任何其他 ZA2F2ED4F8EBC2CBB4C21A29DC40AB6 一样简单
@Test
public void whenMockFinalClassMockWorks() {
FinalList finalList = new FinalList();
FinalList mock = mock(FinalList.class);
when(mock.size()).thenReturn(2);
assertNotEquals(mock.size(), finalList.size());
}
与上面的测试类似,我们创建最终 class 的具体实例和模拟实例,模拟一个方法并验证模拟实例的行为不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.