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

测试DAO之外的所有类,使用junit+easymock的组合,使用unitils整合。

单元测试比较重要的是选择mock框架。在easymock和mockito是个幸福的烦恼,两个框架各有长处。个人感觉易用性上mockito更胜一筹,但是由于unitils把easymock简化到了一定程度,所以选用了easymock。

所有的DAO和其他的Service调用,都用easymock模拟,然后使用unitils的属性注入替换原真实对象。

unitils提供的简化如下:

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

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

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

4. 使用EasyMockUnitils.replay() 重放所有mock对象,不需要再为每个mock对象调用一次replay。

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


简化后代码的例子如下:

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)));
	}
}

你可能感兴趣的:(java,框架,javaee,测试,JUnit,TDD,设计,easymock,unitils)