转: EasyMock与Junit的集成测试
上一篇 /
下一篇 2014-03-24 10:24:14
/ 个人分类:Junit
EasyMock与Junit的集成测试
EasyMock 是一套通过简单的方法对于指定的接口或类生成 Mock 对象的类库,它能利用对接口或类的模拟来辅助单元测试。Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,比如HttpServletRequest、Connection等,从而把测试与测试边界以外的对象隔离开,真正的形成“单元测试”,而不会因为依赖对象对测试产生影响。
1、使用EasyMock的大体步骤
A.使用 EasyMock 生成 Mock 对象;
单个的Mock对象,利用静态导入EasyMock,通过createMock(interfaceName.class)
多个Mock对象,通过ImocksControl管理。
IMocksControl control = EasyMock.createControl();
java.sql.Connection mockConnection = control.createMock(Connection.class);
java.sql.Statement mockStatement = control.createMock(Statement.class);
B.设定 Mock 对象的预期行为和输出; 比如一个PreparedStatement的Mock对象pst
expect(pst.executeQuery()).andReturn(rs);
pst.close();
所有实际代码执行的方法,都必须“录制”。
D. 将 Mock 对象切换到 Replay 状态
单个Mock:replay(mockObj)
多个Mcok:control.replay()
E.利用 Mock 对象方法进行实际单元测试;
String res = login.login(conn, name, pas); //con是一个Connection的Mock对象
F.对 Mock 对象的行为进行验证。
单个Mock:verify(mockObj)
多个Mock:control.verify()
附:利用EasyMock生成数据库连接简单测试示例
- package demo.mock;
-
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
-
-
- public class LoginAction{
-
- public String login(Connection conn, String name, int pas) {
-
- PreparedStatement pst = null;
- ResultSet rs = null;
-
- try {
- String sql = "select * from user where name = ? and pas = ?";
- pst = conn.prepareStatement(sql);
- pst.setString(1, name);
- pst.setInt(2, pas);
- rs = pst.executeQuery();
-
- if(rs.next()) {
- return "登陆成功。";
- } else {
- return "登陆失败。";
- }
-
- }catch(SQLException e) {
- e.printStackTrace();
- return "抛出异常。";
- } finally {
- try {
- rs.close();
- pst.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
-
- }
-
-
- package demo.mock;
-
- import static org.easymock.EasyMock.createControl;
- import static org.easymock.EasyMock.expect;
- import static org.junit.Assert.assertEquals;
-
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
-
- import org.easymock.IMocksControl;
- import org.junit.After;
- import org.junit.Before;
- import org.junit.Test;
-
- public class LoginActionTest {
-
- private LoginAction login;
-
- @Before
- public void init() {
- login = new LoginAction();
- }
-
- @After
- public void destory() {
- login = null;
- }
-
- @Test
- public void login() throws SQLException{
- String name = "admin";
- int pas = 123;
-
-
- IMocksControl control = createControl();
-
- Connection conn = control.createMock(Connection.class);
- PreparedStatement pst = control.createMock(PreparedStatement.class);
- ResultSet rs = control.createMock(ResultSet.class);
-
-
收藏
举报
TAG: