EasyMock만 사용한 경우

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

테스트 코드는 다음과 같이 작성할 수 있다.

  1. JUnit을 사용할 것이므로 별도의 선언이 필요없다.
    public class EasyMockTest {
     . . .
    }


  2. Mock 대상과 테스트 대상을 test fixture로 선언한다.
        private CollaboratorDao mockDao;
        private EasyMockService service;


  3. test fixture 준비 시에 Mock 선언을 하고 Service에 mock을 set한다.
    여기까지 위 @Mock, @InjectIntoByType, @TestedObject에서 처리되는 내용이다.
        @Before
        public void setUp() {
            mockDao = createMock(CollaboratorDao.class);
            service = new EasyMockService();
            service.setCollaboratorDao(mockDao);
        }


  4. Mocking하고자 하는 메소드를 정의한다.
    이는 테스트 대상 메소드와 관련된 메소드에 대해 미리 정의를 해두는 것이다. 해당 메소드의 signature를 정의하고 리턴값이 있는 경우 리턴값을 정해놓고 그 데이터를 이용하여 테스트를 진행하는 것이다.
    • Mocking 대상 메소드가 리턴값을 갖지 않는 경우는 다음과 같이 한다.
              mockDao.insert(board);
              replay(mockDao);
    • Mocking 대상 메소드가 리턴값을 갖는 경우는 다음과 같이 한다.
              expect(mockDao.selectList()).andReturn(Arrays.asList(new BoardVO(101), new BoardVO(102)));
              replay(mockDao);


  5. 테스트 대상 메소드를 실행하고 이후 테스트를 확인하는 등의 코드를 작성한다.
            // 테스트 대상 메소드를 실행한다.
            List<BoardVO> selectList = service.selectList();
     
            // 결과를 확인한다.
            assertNotNull("테스트 대상이 잘 생성되었는지 확인", selectList);
            assertPropertyLenientEquals("id", Arrays.asList(101, 102), selectList);
  6. 마지막으로, Mocking한 메소드를 검증한다.
            verify(mockDao);
 
egovframework/dev2/tst/mock/easymock만_사용한_경우.txt · 마지막 수정: 2023/12/21 05:21 (외부 편집기)
 
이 위키의 내용은 다음의 라이센스에 따릅니다 :CC Attribution-Noncommercial-Share Alike 3.0 Unported
전자정부 표준프레임워크 라이센스(바로가기)

전자정부 표준프레임워크 활용의 안정성 보장을 위해 위험성을 지속적으로 모니터링하고 있으나, 오픈소스의 특성상 문제가 발생할 수 있습니다.
전자정부 표준프레임워크는 Apache 2.0 라이선스를 따르고 있는 오픈소스 프로그램입니다. Apache 2.0 라이선스에 따라 표준프레임워크를 활용하여 발생된 업무중단, 컴퓨터 고장 또는 오동작으로 인한 손해 등에 대해서 책임이 없습니다.
Recent changes RSS feed CC Attribution-Noncommercial-Share Alike 3.0 Unported Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki