===== EasyMock만 사용한 경우 ===== [[..:mock_support#Mock 라이브러리 사용|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 selectList() throws Exception { List result = collaboratorDao.selectList(); return result; } public void insert(BoardVO vo) throws Exception { collaboratorDao.insert(vo); } } CollaboratorDao는 동일하다. public interface CollaboratorDao { List selectList(); void insert(BoardVO vo); } 테스트 코드는 다음과 같이 작성할 수 있다. - JUnit을 사용할 것이므로 별도의 선언이 필요없다.\\ public class EasyMockTest { . . . } \\ - Mock 대상과 테스트 대상을 test fixture로 선언한다.\\ private CollaboratorDao mockDao; private EasyMockService service; \\ - test fixture 준비 시에 Mock 선언을 하고 Service에 mock을 set한다.\\ 여기까지 위 ''@Mock'', ''@InjectIntoByType'', ''@TestedObject''에서 처리되는 내용이다.\\ @Before public void setUp() { mockDao = createMock(CollaboratorDao.class); service = new EasyMockService(); service.setCollaboratorDao(mockDao); } \\ - Mocking하고자 하는 메소드를 정의한다.\\ 이는 테스트 대상 메소드와 관련된 메소드에 대해 미리 정의를 해두는 것이다. 해당 메소드의 signature를 정의하고 리턴값이 있는 경우 리턴값을 정해놓고 그 데이터를 이용하여 테스트를 진행하는 것이다.\\ * Mocking 대상 메소드가 리턴값을 갖지 않는 경우는 다음과 같이 한다.\\ mockDao.insert(board); replay(mockDao); * Mocking 대상 메소드가 리턴값을 갖는 경우는 다음과 같이 한다.\\ expect(mockDao.selectList()).andReturn(Arrays.asList(new BoardVO(101), new BoardVO(102))); replay(mockDao); \\ - 테스트 대상 메소드를 실행하고 이후 테스트를 확인하는 등의 코드를 작성한다.\\ // 테스트 대상 메소드를 실행한다. List selectList = service.selectList(); // 결과를 확인한다. assertNotNull("테스트 대상이 잘 생성되었는지 확인", selectList); assertPropertyLenientEquals("id", Arrays.asList(101, 102), selectList); - 마지막으로, Mocking한 메소드를 검증한다.\\ verify(mockDao);