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