1.mock构造函数和初始化代码块
// AnOrdinaryClassWithBlock的MockUp类,继承MockUp即可
public static class AnOrdinaryClassWithBlockMockUp extends MockUp<AnOrdinaryClassWithBlock> {
// Mock构造函数和初始代码块, 函数名$init就代表类的构造函数
@Mock
public void $init(int i) {
}
// Mock静态初始代码块,, 函数名$cinit就代表类的静态代码块
@Mock
public void $clinit() {
}
}
2.同一方法调用返回时序结果 录制时底层是结果一个数组迭代输出结果
AnOrdinaryClass instance = new AnOrdinaryClass();
new Expectations(instance) {
{
instance.ordinaryMethod();
// 对实例instance调用ordinaryMethod方法时,依次返回1,2,3,4,5
result = new int[] { 1, 2, 3, 4, 5 };
}
};
3.mock提供aop方法拦截所有方法
// 测试SayHello类每个方法的时间性能
@Test
public void testSayHelloCostPerformance() {
// 把方法的调用时间记录到costMap中。key是方法名称,value是平均调用时间
Map<String, Long> costMap = new HashMap<String, Long>();
new MockUp<SayHello>() {
@Mock
public Object $advice(Invocation invocation) {
long a = System.currentTimeMillis();
Object result = invocation.proceed();
long cost = System.currentTimeMillis() - a;
// 把某方法的平均调用时间记录下来
String methodName = invocation.getInvokedMember().getName();
Long preCost = costMap.get(methodName);
if (preCost == null) {
costMap.put(methodName, cost);
} else {
costMap.put(methodName, (preCost + cost) / 2);
}
return result;
}
};
4.还想研究看下面链接:Notes/JMockit.md at master · eussi/Notes · GitHub