目录
1.EasyMock 简介
2.EasyMock 实例
3.EasyMock 模型
3.1、record-replay-verify 模型
3.2、record
3.3、replay
3.4、verify
3.5、easymock部分功能说明
2. 记录mock对象期望的行为
4.EasyMock 应用
4.1、Easymock对AccountService进行测试
4.2、用Easymock对WebClient的测试
编辑
1.EasyMock 简介
Mock 对象的弊端?
手动的构造 Mock 对象会给开发人员带来额外的编码量
为创建 Mock 对象而编写的代码很有可能引入错误
根据现有的接口或类动态生成 Mock 对象,能避免额外的编码工作,同时也降低了引入错误的可能。
EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库。
提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。
通过 EasyMock,可以方便的构造 Mock 对象从而使单元测试顺利进行
easymock的官网 https://easymock.org/

2.EasyMock 实例
public class User { private String id; private String name; private int age; public String getId() {return id;} public void setId(String id) {this.id = id;} public String getName() {return name;} public void setName(String name) {this.name = name;} public int getAge() {return age;} public void setAge(int age) {this.age = age;} public User() {super();} public User(String id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } }
讯享网
讯享网public interface UserService { User query(String userId); }
public interface UserDao { User getById(String userId); }
讯享网public class UserServiceImpl implements UserService { private UserDao userDao; public User query(String userId) { return userDao.getById(userId); } public void setUserDao(UserDao userDao) { this.userDao = userDao; } }
定义两个interface:
UserService 和 UserDao, 并给出了实现类UserServiceImpl 。 UserServiceImpl依赖到UserDao,通过setter方法可以注入一个UserDao实现。
使用mock object 技术测试:UserServiceImpl
手动Mock的测试方法
class MockUserDao implements UserDao { private Map<String, User> users = new HashMap<String, User>(); public void addUser(String userid, User user) { users.put(userid, user); } public User getById(String userId) { // TODO Auto-generated method stub return users.get(userId); }
完整测试方法
讯享网public class UserServiceImplTestWithMockObject { @Test public void testQuery() { User expectedUser = new User(); expectedUser.setId("1001"); expectedUser.setAge(30); expectedUser.setName("user-1001"); MockUserDao mud = new MockUserDao(); mud.addUser("1001", expectedUser); UserServiceImpl service = new UserServiceImpl(); service.setUserDao(mud); User user = service.query("1001"); assertNotNull(user); assertEquals("1001", user.getId()); assertEquals(30, user.getAge()); assertEquals("user-1001", user.getName()); } }
如果使用EasyMock技术,如何实现,带来多大的方便???


3.EasyMock 模型
3.1、record-replay-verify 模型
record-replay-verify 模型容许记录mock对象上的操作然后重演并验证这些操作。
是目前mock框架领域最常见的模型
几乎所有的mock框架都是用这个模型
3.2、record
UserDao userDao = EasyMock.createMock(UserDao.class); EasyMock.expect(userDao.getById("1001")).andReturn(expectedUser);
创建mock对象,并期望这个mock对象的方法被调用,同时给出希望这个方法返回的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/120712.html