JMockit常见用法 -Mock实例
在Mock类的章节中,我们知道了如何用Expectations来Mock类。Mock实例的用法基本一样。只需要把Expectations的构造函数参数换成实例即可。
用Expectations来Mock类与用Expectations来Mock实例的唯一不同就在于,前者影响类的所有实例,而后者只影响某一个实例。
//mock实例
public class InstanceMockingByExpectationsTest {
@Test
public void testInstanceMockingByExpectation() {
AnOrdinaryClass instance = new AnOrdinaryClass();
// 直接把实例传给Expectations的构造函数即可Mock这个实例
new Expectations(instance) {
{
// 尽管这里也可以Mock静态方法,但不推荐在这里写。静态方法的Mock应该是针对类的
// mock普通方法
instance.ordinaryMethod();
result = 20;
// mock final方法
instance.finalMethod();
result = 30;
// native, private方法无法用Expectations来Mock
}
};
Assert.assertTrue(AnOrdinaryClass.staticMethod() == 1);
Assert.assertTrue(instance.ordinaryMethod() == 20);
Assert.assertTrue(instance.finalMethod() == 30);
// 用Expectations无法mock native方法
Assert.assertTrue(instance.navtiveMethod() == 4);
// 用Expectations无法mock private方法
Assert.assertTrue(instance.callPrivateMethod() == 5);
}
@BeforeClass
// 加载AnOrdinaryClass类的native方法的native实现
public static void loadNative() throws Throwable {
JNITools.loadNative();
}
}