Mock Objects 라이브러리 선정을 위한 참고 자료에서 소개한 easy mock 사용하기. 2.2 홈페이지 문서를 참조하여 작성한다.
easy mock2 부터는 jdk5에서만 구동함!
먼저 Mock 객체를 얻기 위한 세 가지 할 일
1번에 대한 예제 코드:
mock = createMock(Collaborator.class);
createMock은 이클립스(3.2 기준) 자동 import가 되지 않으므로 직접 타이핑해야 한다.
import static org.easymock.EasyMock.createMock;
2번에 대한 예제 코드는 애매하다. 업무(도메인)에 따라 천차 만별이기 때문이다. 중요한 것은 JUnit assertion의 기대값을 하나의 객체가 아니라 행위로 설정 혹은 녹화 한다는 점이다. 이렇게 예상되는 행위를 설정할 수 있는 'intelligence'로 인해서 stub과 구분된다는 점을 Expert Spring MVC and Web Flow (Expert) p297에서 언급하고 있다. 마틴 파울러의 글, 테스트 전용 객체(Test Double)에서는 다른 개념을 더 엮어서 분류하고 있다.
3번은 예상/녹화한 대로 실행/재생하는 것이다:
replay(mock);
추가적으로 애초 의도대로 테스트가 진행되었는지 검증이 필요하다:
verify(mock);
실전 예제
easy mock2 부터는 jdk5에서만 구동함!
먼저 Mock 객체를 얻기 위한 세 가지 할 일
- create a Mock Object for the interface we would like to simulate,
- record the expected behavior, and
- switch the Mock Object to replay state.
1번에 대한 예제 코드:
mock = createMock(Collaborator.class);
createMock은 이클립스(3.2 기준) 자동 import가 되지 않으므로 직접 타이핑해야 한다.
import static org.easymock.EasyMock.createMock;
2번에 대한 예제 코드는 애매하다. 업무(도메인)에 따라 천차 만별이기 때문이다. 중요한 것은 JUnit assertion의 기대값을 하나의 객체가 아니라 행위로 설정 혹은 녹화 한다는 점이다. 이렇게 예상되는 행위를 설정할 수 있는 'intelligence'로 인해서 stub과 구분된다는 점을 Expert Spring MVC and Web Flow (Expert) p297에서 언급하고 있다. 마틴 파울러의 글, 테스트 전용 객체(Test Double)에서는 다른 개념을 더 엮어서 분류하고 있다.
3번은 예상/녹화한 대로 실행/재생하는 것이다:
replay(mock);
추가적으로 애초 의도대로 테스트가 진행되었는지 검증이 필요하다:
verify(mock);
To verify that the specified behavior has been used, we have to call
verify(mock)실전 예제
웹 컨트롤러의 ID 중복 확인 사례
