快速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)));
	}
}
相關文章
相關標籤/搜索