利用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; //创建Mock对象 IMocksControl control = createControl(); //创建多个Mock对象时通过IMocksControl管理 Connection conn = control.createMock(Connection.class); PreparedStatement pst = control.createMock(PreparedStatement.class); ResultSet rs = control.createMock(ResultSet.class); // 录制信息,即设定Mock对象的预期行为和输出 // 所有Mock对象需要执行的方法都必须录制,如pst.setInt(2, pas)、rs.close()等 String sql = "select * from user where name = ? and pas = ?"; expect(conn.prepareStatement(sql)).andReturn(pst).times(1); pst.setString(1, name); pst.setInt(2, pas); expect(pst.executeQuery()).andReturn(rs); expect(rs.next()).andReturn(true); rs.close(); pst.close(); //录制完成,切换replay状态 control.replay(); //调用实际的方法 String res = login.login(conn, name, pas); String expected = "登陆成功。"; assertEquals(expected, res); //验证 control.verify(); } }
posted on 2018-04-24 23:14 luzhouxiaoshuai 阅读(572) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2017-04-24 黎活明8天快速掌握android视频教程--22_访问通信录中的联系人和添加联系人
2017-04-24 黎活明8天快速掌握android视频教程--21_监听ContentProvider中数据的变化
2017-04-24 黎活明8天快速掌握android视频教程--20_采用ContentProvider对外共享数据
2017-04-24 黎活明8天快速掌握android视频教程--19_采用ListView实现数据列表显示
2017-04-24 黎活明8天快速掌握android视频教程--18_在SQLite中使用事务
2017-04-24 黎活明8天快速掌握android视频教程--17_创建数据库与完成数据添删改查
2017-04-24 黎活明8天快速掌握android视频教程--16_采用SharedPreferences保存用户偏好设置参数