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