EasyMock과 Unitils를 함께 사용한 예를 EasyMock만 사용한 경우를 코드를 통해 살펴보자. EasyMockOnlyTest 소스에서 전체 소스를 확인하고 비교해보기 바란다.
테스트 대상 코드(EasyMockService)는 다음과 같다. selectList와 insert 메소드를 갖고 있고, 각각 CollaboratorDao의 selectList와 insert 메소드를 호출하고 있다. Unitils를 사용한 예에 비해 테스트를 위한 setCollaboratorDao 메소드가 필요하다.
@Service("easyMockService") public class EasyMockService { @Resource(name="collaboratorDao") private CollaboratorDao collaboratorDao; public void setCollaboratorDao(CollaboratorDao dao) { collaboratorDao = dao; } public List<BoardVO> selectList() throws Exception { List<BoardVO> result = collaboratorDao.selectList(); return result; } public void insert(BoardVO vo) throws Exception { collaboratorDao.insert(vo); } }
CollaboratorDao는 동일하다.
public interface CollaboratorDao { List<BoardVO> selectList(); void insert(BoardVO vo); }
테스트 코드는 다음과 같이 작성할 수 있다.
public class EasyMockTest { . . . }
private CollaboratorDao mockDao; private EasyMockService service;
@Mock
, @InjectIntoByType
, @TestedObject
에서 처리되는 내용이다.@Before public void setUp() { mockDao = createMock(CollaboratorDao.class); service = new EasyMockService(); service.setCollaboratorDao(mockDao); }
mockDao.insert(board); replay(mockDao);
expect(mockDao.selectList()).andReturn(Arrays.asList(new BoardVO(101), new BoardVO(102))); replay(mockDao);
// 테스트 대상 메소드를 실행한다. List<BoardVO> selectList = service.selectList(); // 결과를 확인한다. assertNotNull("테스트 대상이 잘 생성되었는지 확인", selectList); assertPropertyLenientEquals("id", Arrays.asList(101, 102), selectList);
verify(mockDao);