Mockito - How about some stubbing?
모하니?/Coding : 2008/07/31 17:25
참조 : http://mockito.googlecode.com/svn/branches/1.4/javadoc/org/mockito/Mockito.html
//인터페이스가 아니라, 클래스의 mock 객체도 생성할 수 있다.
//easymock 보다 편하군요. easymcok은 extention 라이브러리를 설치해야 사용할 수 있죠.
LinkedList mockedList = mock(LinkedList.class);
//Stubbing
stub(mockedList.get(0)).toReturn("first");
stub(mockedList.get(1)).toThrow(new RuntimeException());
//"first"를 출력할 것이고..
System.out.println(mockedList.get(0));
//RuntimeException을 던질 것이고..
System.out.println(mockedList.get(1));
//get(999)는 stubbing 하지 않았으니까 "null"을 출력할 겁니다.
System.out.println(mockedList.get(999));
//Stubbing 한 호출들은 암묵적으로 검증을 합니다. 여러분이 원하는 예외적인 흐름 상 해야만 한다면 해도 상관없습니다.
//명시적으로 스텁 호출을 검증하는게 가능하긴 한데, 대부분의 경우 그럴필요까진 없습니다.
verify(mockedList).get(0);
EasyMock Code
Mockito Code
흠 오늘은 service 패키지 테스트들을 전부 Mockito로 바꿀려고 했는데, 오늘 안엔 다 못하겠군요. 오늘은 Mockito나 좀 더 공부하고 내일까지 해야겠네요.
//인터페이스가 아니라, 클래스의 mock 객체도 생성할 수 있다.
//easymock 보다 편하군요. easymcok은 extention 라이브러리를 설치해야 사용할 수 있죠.
LinkedList mockedList = mock(LinkedList.class);
//Stubbing
stub(mockedList.get(0)).toReturn("first");
stub(mockedList.get(1)).toThrow(new RuntimeException());
//"first"를 출력할 것이고..
System.out.println(mockedList.get(0));
//RuntimeException을 던질 것이고..
System.out.println(mockedList.get(1));
//get(999)는 stubbing 하지 않았으니까 "null"을 출력할 겁니다.
System.out.println(mockedList.get(999));
//Stubbing 한 호출들은 암묵적으로 검증을 합니다. 여러분이 원하는 예외적인 흐름 상 해야만 한다면 해도 상관없습니다.
//명시적으로 스텁 호출을 검증하는게 가능하긴 한데, 대부분의 경우 그럴필요까진 없습니다.
verify(mockedList).get(0);
- 기본적으로, 반환 값이 있는 모든 메소드들은, mock은 null을 반환하거나, 비어있는 콜렉션 또는 적절한 primitive 값을 반환합니다.(e.g: 0, false, ... for int/Integer, boolean/Boolean, ...).
- 스텁 작업은 오버라이딩 할 수 있습니다. 예를 들어, 스텁으로 fixture를 만들어 둘텐데 그걸 테스트 메소드내에서 재정의할 수 있습니다.
- 한 번 스텁을 만들어 두면 mocking한 메소드는 몇 번을 호출하든 상관없이 항상 스텁 값을 반환합니다.
- 같은 메소드를 여러번 스텁 했을 때는 마지막에 스텁한 녀석이 더 중요합니다.
- 명시적으로 스텁 호출을 검증하는 것이 가능하긴 한데, 대부분의 경우 불필요 합니다. 스텁 호출은 암묵적으로 검증을 합니다. 여러분이 작성한 코드의 실행 흐름에 따라 알아서 해줄 겁니다.
EasyMock Code
@Test
public void get() {
int id = 1;
Member member = new Member();
member.setId(id);
expect(mockDao.get(id)).andReturn(member);
replay(mockDao);
assertEquals(member, service.get(id));
verify(mockDao);
}
public void get() {
int id = 1;
Member member = new Member();
member.setId(id);
expect(mockDao.get(id)).andReturn(member);
replay(mockDao);
assertEquals(member, service.get(id));
verify(mockDao);
}
Mockito Code
@Test
public void get() {
int id = 1;
Member member = new Member();
member.setId(id);
stub(mockDao.get(id)).toReturn(member);
assertThat(service.get(id), sameInstance(member));
}
public void get() {
int id = 1;
Member member = new Member();
member.setId(id);
stub(mockDao.get(id)).toReturn(member);
assertThat(service.get(id), sameInstance(member));
}
흠 오늘은 service 패키지 테스트들을 전부 Mockito로 바꿀려고 했는데, 오늘 안엔 다 못하겠군요. 오늘은 Mockito나 좀 더 공부하고 내일까지 해야겠네요.
'모하니? > Coding' 카테고리의 다른 글
| JavaMail - HTML 메일 보내기 (0) | 2008/08/07 |
|---|---|
| JavaMail - 간단한 Text 메시지 보내기 (0) | 2008/08/07 |
| JavaMail - POP3로 메일 읽어오기 (0) | 2008/08/06 |
| JavaMail 에러 잡기 - javax.mail.MessagingException: [EOF] (0) | 2008/08/06 |
| Mockito - Verifying exact number of invocations / at least once / never (0) | 2008/07/31 |
| Mockito - How about some stubbing? (0) | 2008/07/31 |
| 5시에 들어온 미션~ (0) | 2008/07/30 |
| assertThat()으로 null 여부 확인하기 (0) | 2008/07/30 |
| 하이버네이트 Criteria 다루기 - 중복일까 아닐까 (2) | 2008/07/30 |
| log4j 설정 파일 위치를 명시적으로 설정하고 싶을 때.. (4) | 2008/07/23 |
| 바코드를 출력 및 읽기 코딩할 때 주의할 것 (0) | 2008/07/23 |
TAG Mockito





