1. 概述
在这篇简短教程中,我们将重点讲解如何使用Mockito mock final类和方法。
如同其他专注于Mockito框架的文章(如Mockito验证,Mockito的When/Then和Mockito的Mock方法)一样,我们将在测试用例中使用下面的MyList
类作为协作对象。
我们将为本次教程添加一个新的方法:
public class MyList extends AbstractList<String> {
final public int finalMethod() {
return 0;
}
}
并为其扩展一个final类:
public final class FinalList extends MyList {
@Override
public int size() {
return 1;
}
}
2. mock final方法
一旦Mockito配置完毕,我们可以像模拟其他方法一样轻松地模拟final方法:
@Test
public void whenMockFinalMethod_thenMockWorks() {
MyList myList = new MyList();
MyList mock = mock(MyList.class);
when(mock.finalMethod()).thenReturn(1);
assertThat(mock.finalMethod()).isNotZero();
}
通过创建MyList
的实例和模拟实例,我们可以比较两个版本的finalMethod()
返回的值,并验证模拟对象被正确调用了。
3. mock final类
mock final类与mock任何其他类同样简单:
@Test
public void whenMockFinalClass_thenMockWorks() {
FinalList mock = mock(FinalList.class);
when(mock.size()).thenReturn(2);
assertThat(mock.size()).isNotEqualTo(1);
}
类似上述测试,我们创建了最终类的实例和模拟实例,模拟了一个方法,并验证了模拟实例的行为有所不同。
4. 总结
在这篇快速的文章中,我们介绍了如何使用Mockito扩展来模拟最终类和方法。完整的示例,如往常一样,可以在GitHub上找到。