您的位置:首页 > 编程语言 > Java开发

Junit和EasyMock的使用

2013-07-14 17:48 274 查看
     本文将介绍Junit和EasyMock结合进行复杂环境的模拟测试。

     在我们开发的过程中往往会遇到程序十分复杂,结果不能即时获得的情况。譬如远程数据库的连接或者网络获取数据的情况,但是此时我们已经写好部分功能并希望进行测试。那么此时,我们只能预设复杂过程的输出。设置复杂过程的输出需要借助EasyMock这个开源工具,大家可以去度娘下载。

     package net.jessenpan.test;
public interface IRemoteConnection {

public abstract String getRemoteData();
}

package net.jessenpan.test;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class RemoteConnection implements IRemoteConnection {

    /* (non-Javadoc)
     * @see IRemoteConnection#getRemoteData()
     */
    @Override
    public String getRemoteData(){
        
        String result=null;
        Socket socket=null;
        try {
            InetAddress inetAddress=InetAddress.getByName("www.facebook.com");
            socket=new Socket(inetAddress, 8080);
            InputStream inputStream=socket.getInputStream();
            byte[] resultBytes=new byte[50];
            inputStream.read(resultBytes,0,10);
            result=resultBytes.toString();
  
4000
     } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }
}


可以看到,上述代码的作用是从faceboook获取数据并返回相应的数据,但是国内并无法访问。那么这个函数我们就无法进行测试了。有没有什么办法可以解决呢?
通过EasyMock就可以解决上述问题。代码如下:

package net.jessenpan.Junittest;

import static org.junit.Assert.*;
import net.jessenpan.test.IRemoteConnection;

import org.easymock.EasyMock;
import org.junit.Test;

public class RemoteConnectionTest {

private IRemoteConnection Iremote=null;

@Test
public void testGetRemoteData() {
Iremote=EasyMock.createMock(IRemoteConnection.class);
EasyMock.expect(Iremote.getRemoteData()).andReturn("Hello,World");
EasyMock.replay(Iremote);
String expect="Hello,World";
String actual=Iremote.getRemoteData();
assertEquals(expect, actual);
EasyMock.verify(Iremote);
}
}


运行上述代码,测试通过。
EasyMock是通过录制,预设返回并回放的构造进行单元测试的。

首先我们设置当调用getRemoteData()时,返回Hello,World。然后通过设置replay进行回放。

那么当我们进行测试并调用getRemoteData()时,返回的数据即为设定的Hello,World,而不是从facebook返回的数据。通过这种方法可以使我们在极端环境下进行测试工作,从而增加程序的健壮性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java EasyMock Junit