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 );
         }
     }
 
}

 

猜你喜欢

转载自www.cnblogs.com/funkboy/p/12012571.html