记录追寻测试架构师之路上的点点滴滴。

[Test]JMock的使用指南

上一篇 / 下一篇  2011-12-23 14:54:42 / 个人分类:测试技术

本文来自我的独立blog,原文链接:http://www.wangyuxiong.com/archives/51489


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接口,代码如下

 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



TAG: JMock jmock JUnit Junit JUNIT junit test Test

 

评分:0

我来说两句

Open Toolbar