2025年高效单元测试——EasyMock技术与应用

高效单元测试——EasyMock技术与应用目录 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

大家好,我是讯享网,很高兴认识大家。

目录

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对象的方法被调用,同时给出希望这个方法返回的结果。
小讯
上一篇 2025-01-11 20:20
下一篇 2025-03-30 15:10

相关推荐

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