快速JavaEE轻量级框架&公用业务模块 设计&实现 6.2 - 单元测试

测试DAO以外的全部类,使用junit+easymock的组合,使用unitils整合。 java

单元测试比较重要的是选择mock框架。在easymock和mockito是个幸福的烦恼,两个框架各有长处。我的感受易用性上mockito更胜一筹,可是因为unitils把easymock简化到了必定程度,因此选用了easymock。 框架

全部的DAO和其余的Service调用,都用easymock模拟,而后使用unitils的属性注入替换原真实对象。 单元测试

unitils提供的简化以下: 测试

1. @TestedObject用于表示待测对象 spa

2. @Mock表示将要mock的类,用于简化easymock中的createMock code

3. @InjectIntoByType表示将当前的属性经过属性注入的方式替换@TestedObject对象的相应属性。这里待测对象不须要提供可访问的setter,unitils会直接反射私有属性。 对象

4. 使用EasyMockUnitils.replay() 重放全部mock对象,不须要再为每一个mock对象调用一次replay。 it

5. 测试结束后,不须要再调用verify方法,unitils会自动调用。 io


简化后代码的例子以下: class

public final class RoleServiceTest extends UnitilsJUnit4 {
	
	@TestedObject
	private RoleService roleService = new RoleServiceImpl();
	
	@Mock
	@InjectIntoByType
	private RoleDao roleDao;
	
	@Test
	public void findAll() {
		expect(roleDao.findAll(new PageRequest(1, 10))).andReturn(new PageImpl<Role>(Lists.newArrayList(new Role())));
		replay();
		assertReflectionEquals(new PageImpl<Role>(Lists.newArrayList(new Role())), roleService.findAll(new PageRequest(1, 10)));
	}
}
相关文章
相关标签/搜索