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

        }

    }

}

 

原文地址:https://www.cnblogs.com/funkboy/p/12012571.html

时间: 2024-11-13 08:00:20

jmockit中文网 aop设置的相关文章

jmockit中文网 dubbo bean

Dubbo是我们常用的RPC框架,在写单元测试需要调用Dubbo消费Bean时,如何模拟Dubbo消费Bean的行为呢? 就拿发邮件来说,通常,在代码中,我们是调用邮件的Dubbo服务来完成发送邮件的目的,于是我们会在Spring配置好的发邮件的Dubbo消费Bean,dubbo-consumer.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?xml version="1.0" encoding="utf-8"?>

jmockit 中文网 springbean

如今,我们的很多应用程序是基于Spring的,通过Spring IOC容器来管理我们的Java对象.所以这里单独提出对Spring Bean如何Mock方法. 以上述提到如何Mock类中的提到的AnOrdinaryClass为例,先把这个类配置在Spring的配置文件中 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?xml version="1.0" encoding="utf-8"?> <!--su

jmockit中文网备份 @Mocked入门

当@Mocked修饰一个类时 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19  //@Mocked注解用途 public class MockedClassTest {     // 加上了JMockit的API @Mocked, JMockit会帮我们实例化这个对象,不用担心它为null     @Mocked     Locale locale;     // 当@Mocked作用于class     @Test     public void

jMockit中文网备份 @Test&amp;@Injectable

@Injectable 与 @Mocked的不同 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 //@Mocked与@Injectable的不同 public class MockedAndInjectable {     @Test     public void testMocked(@Mocked Locale locale) {         // 静态方法不起作用了,返回了null         

jmockit中文网 expectations 入门

通过上面的例子,我们已经了解了Expectations的作用主要是用于录制.即录制类/对象的调用,返回值是什么. 录制脚本规范 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 new Expectations() {     // 这是一个Expectations匿名内部类     {           // 这是这个内部类的初始化代码块,我们在这里写录制脚本,脚本的格式要遵循下面的约定         //方法调用(可是类的静态方法调用,也可以

jmockit 中文网 构造函数中文代码块

有时候,有些编写不良好的类的构造函数,初始代码块,静态代码块存在大量的初始化逻辑,初始化会报错. 比如,有些类初始化的时候就去连结DB,连不上就报错.这很影响我们的测试程序的运行. 此时,我们需要把这些初始化逻辑Mock掉.用我们的Mock逻辑替代.要Mock这些初始化代码,很简单.见如下的例子: 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 //一个包含初始代码块的普通类  publi

jmockit中文网 定制结果

在学习Expectations(API:Expectations)时   ,在new Expectations{{}}代码中,返回的结果都比较简单.就是一个单一的对象.可是有时,这个返回的结果,可能是需要经历一些业务逻辑计算后,才知道返回什么的,此时,我们就需要定制返回结果了. 还是上例子吧. 还是以上文打招呼的例子来说. 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

jmockit 中文网 mq消息生产者

RocketMQ是我们常用的消息中间件,在运行单元测试时,我们可能不需要真正发送消息(除非是为了测试发送消息),也不想因为连结不上RocketMQ的Broker,NameServer而影响单元测试运行.   那我们该如何Mock RocketMQ消息生产者呢?  请看例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 //RocketMQ消息生产者 Mock  public class RocetMQProduce

Jmockit使用

引用单元测试中mock的使用及mock神器jmockit实践中的java单元测试中各种Mock框架对比,就能明白JMockit有多么强大: JMockit是基于JavaSE5中的java.lang.instrument包开发,内部使用ASM库来动态修改java的字节码,使得java这种静态语言可以想动态脚本语言一样动态设置被Mock对象私有属性,模拟静态.私有方法行为等等,对于手机开发,嵌入式开发等要求代码尽量简洁的情况下,或者对于被测试代码不想做任何修改的前提下,使用JMockit可以轻松搞定