[Test]JMock的使用指南

十二 23rd, 2011

      Mock的概念还是比较简单的,相当于真实的对象的替身,它实现了测试中用到的接口,并给接口中的方法设置测试需要返回的值。

      现在有多种用来方便地动态生成Mock对象的Java API:如Easy Mock,JMock,DynaMock等。

1. 搭建Jmock的环境

1.1 目前比较稳定的jmock版本是2.5.1,支持java 5 + 版本。可以从官网下载该版本。

      下载地址:http://www.jmock.org/download.html 

     为了使用jmock ,我们必须先要引用下面四个jar包:如图所示

  • jmock-2.5.1.jar
  • hamcrest-core-1.1.jar
  • hamcrest-library-1.1.jar
  • jmock-junit4-2.5.1.jar      image

1.2 准备好被mock的接口,添加好一个interface接口,代码如下:

package com.lifeware.mocksample;

public interface Subscriber {
    void receive(String message);
    
}

 

1.3 准备好接口的实现类,代码如下:

package com.lifeware.mocksample;
public class SubscriberImpl implements Subscriber{
    public String msg = "";
    
    public void receive(String message){
        msg = message;
    }
}

 

1.4 最后,我们还需要一个publisher类

package com.lifeware.mocksample;
import java.util.*;

public class Publisher {
    List<Subscriber> subs = new ArrayList<Subscriber>();
    
    public void add(Subscriber sub){
        subs.add(sub);    
    }
    
    public void publish(String message){
        for(int index=0;index<subs.size();index++){
            Subscriber sub = subs.get(index);
            sub.receive(message);
        }
    }
}

1.5 上述的代码结构如下,我们将其存放在src文件下:

 image

 

2.  编写TestCase

2.1 新增一个junit的testcase类,在使用jmock之前,我们需要import一些jmock的类以及创建一个"Mockery”对象。

import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.*;

import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JMock;
import org.jmock.integration.junit4.JUnit4Mockery;

@RunWith(JMock.class)
public class PublisherTest {
       JUnit4Mockery context = new JUnit4Mockery();
}

 

2.2 添加一个测试方法:

@Test 
public void oneSubscriberReceivesAMessage() {
       final Subscriber subscriber = context.mock(Subscriber.class); 
       Publisher publisher = new Publisher();
       publisher.add(subscriber);
       final String message = "message";
       // expectations
        context.checking(new Expectations() {{
               oneOf (subscriber).receive(message);
        }});

      // execute
      publisher.publish(message);
}

      上面的代码中貌似没有明确的verify代码.但实际上,如果mock的Subscriber 的调用与期望的不符,该case会失败的。JMock test runner 会自动去执行这个验证过程。

 

3. case执行:

     Run as –>Junit Test,  结果如下:

image





除非注明,本站文章均为原创。本文基于 BY-NC-SA 协议进行授权,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 metaboy(包含链接).

本文链接地址: http://blog.wangyuxiong.com/archives/51489

订阅本站:http://www.wangyuxiong.com/feed

分类: 技术尝新 测试技术         标签: , ,
目前还没有任何评论.

无觅相关文章插件,快速提升流量