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返回的数据。通过这种方法可以使我们在极端环境下进行测试工作,从而增加程序的健壮性。
在我们开发的过程中往往会遇到程序十分复杂,结果不能即时获得的情况。譬如远程数据库的连接或者网络获取数据的情况,但是此时我们已经写好部分功能并希望进行测试。那么此时,我们只能预设复杂过程的输出。设置复杂过程的输出需要借助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返回的数据。通过这种方法可以使我们在极端环境下进行测试工作,从而增加程序的健壮性。
相关文章推荐
- 单元测试整理(六)—— 使用EasyMock和JUnit进行单元测试
- Java单元测试Junit(三)使用EasyMock扩展Junit
- 在Eclipse中使用Junit4.x与EasyMock进行单元测试
- Eclipse快速上手指南之使用JUnit
- 使用ant编译、运行junit、以及检查编码
- map的遍历方式(使用Junit测试)
- 使用 JUnit 进行 Java 代码的单元测试
- Spring Test 整合 JUnit 4 使用总结
- Junit的安装与使用
- 安装并使用JUnit
- Spring项目中使用Junit单元测试并配置数据源的问题
- Junit使用教程(四)
- Intellij idea使用Junit
- Android JUnit Test的使用
- Junit框架使用(2)--参数化测试
- Junit使用教程(三)
- Spring Test 整合 JUnit 4 使用总结
- Junit的使用
- JbuilderX使用Junit学习笔记
- Junit的使用实例