jmockit中文网 aop设置
Posted funkboy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jmockit中文网 aop设置相关的知识,希望对你有一定的参考价值。
在学习MockUp(API:MockUp)时, MockUp可以自定义方法体,覆盖类原有的方法。 JMockit给我们提供了一个特别的方法,用于拦截所有方法,可以让我们在基于被Mock的方法做AOP。 比如我们想测试每个方法的时间性能。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
//通过在mock时做AOP测试方法的时间性能 public class MethodCostPerformanceTest { // 测试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; } }; SayHello sayHello = new SayHello(); sayHello.sayHello( "david" , ISayHello.MALE); sayHello.sayHello( "lucy" , ISayHello.FEMALE); for (Iterator<String> iterator = costMap.keySet().iterator(); iterator.hasNext();) { String methodName = (String) iterator.next(); // 期望每个方法的调用时间不超过20ms Assert.isTrue(costMap.get(methodName) < 20 ); } } }
|
以上是关于jmockit中文网 aop设置的主要内容,如果未能解决你的问题,请参考以下文章
JMockit 模拟返回 String 而不是提供的 List<String>