Mockito – Verifying exact number of invocations / at least once / never

Mockito 사용해서 정확한 메소드 호출 횟 수 / 최소한 한 번 / 전혀~ 한 번도 호출 안했는지 검증하기

  //mock 사용하기
  mockedList.add(“once”);
 
  mockedList.add(“twice”);
  mockedList.add(“twice”);
 
  mockedList.add(“three times”);
  mockedList.add(“three times”);
  mockedList.add(“three times”);
 
  //다음 두 번의 검증은 똑같다. 기본으로 times(1)를 사용하기 때문에..
  verify(mockedList).add(“once”);
  verify(mockedList, times(1)).add(“once”);
 
  //정확한 호출 횟 수 검증
  verify(mockedList, times(2)).add(“twice”);
  verify(mockedList, times(3)).add(“three times”);
 
  //neber()를 사용한 검증, times(0)과 같다.
  verify(mockedList, never()).add(“never happened”);
 
  //atLeastOnce()를 사용한 검증
  verify(mockedList, atLeastOnce()).add(“three times”);
 
Whiteship’s Exercise

EasyMock Code

    @Test
    public void delete() {
        Member member = new Member();
        mockDao.delete(member);

        replay(mockDao);

        service.delete(member);

        verify(mockDao);
    }

Mockito Code

    @Test
    public void delete() {
        Member member = new Member();
        service.delete(member);
        verify(mockDao).delete(member);
    }

Mockito – How about some stubbing?

참조 : 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);

  • 기본적으로, 반환 값이 있는 모든 메소드들은, 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);
    }

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

흠 오늘은 service 패키지 테스트들을 전부 Mockito로 바꿀려고 했는데, 오늘 안엔 다 못하겠군요. 오늘은 Mockito나 좀 더 공부하고 내일까지 해야겠네요.

20080731 GMP

News

stamp 승인
sue 쑤: 고소하다
products 프로닥츠

The federal trade commission(FTC) wants tobacco compannies to remove its stamp of approval for those tests. The proposal could open the door for the FTC to sue companies that call their products light or raw tar.

Screen English

I see her every day. I see her in your goodnees Jein, and Kera your passion, and Rilly your eyes and your smiles. So here is what I’m going to do. I’m grounding myself here for life. I’m sticking with you. I’m gonna be with you.

Pop’s English

See your pretty face in the sunshine.
In the morning after staying up all night.
I want to wake you. just here you tell me. “It’s all right”

Talk Play Learn

I want you to (네가 ~ 해주길 바래)
I want you to join us.
I want you to know this.
I want you to promise me.
I want you to quit smoking.
I want you to remember me.
I want you to practice more.
I want you to take a message.
I want you to have confidence

Learn More

끝마치다. 포장하다. = wrap up
Would you wrap this up as a gift?
Lets’s wrap up the meeting.

FLV 파일 합치기

스크린캐스팅과 관련되서 점점 달인이 되가는 기분입니다. 녹화 툴, 인코딩 툴, 이제는 동영상 파일 편집까지…ㄷㄷㄷ.. 한 방에 튜토리얼을 녹화했더니, 30분 가까이 되는 영상이 나와서, 다시 녹화를 했습니다. 좀 빠르게 진행을 해서 26분짜리가 나왔는데, 파일 용량이 너무 커서 스트리밍하는데 문제가 있었습니다. 그래서 이번엔 튜토리얼의 세부 실습 메뉴 9개에 따라 9개로 나눠서 녹화를 했습니다. 이 순간.. 그래 이거야. 내가 왜 통짜로 녹화해서 고생을 했지.. 디바이드 앤 퀀쿼!! 통짜로 녹화하는 것 보다 Export나 Encoding이 훨씬 편했습니다. 하지만… 너무 파일이 많아서 링크 클릭하기가 귀찮다는 -_-;;; 그렇다고 다시 녹화하기에는 이미 충분히 시간을 소비한 프로젝트였습니다.

그냥 합치자!!..

그래서 구글링을 통해 찾아낸 툴이 avidemux. 무료지만, 아주 편하고 쉽게 flv 파일들을 붙여줍니다.

사용자 삽입 이미지
간단하게 file -> open으로 첫 번째 파일을 열고, 그 뒤에 붙일 파일은 file -> append로 열면 됩니다. 그럼 맨 아래 왼쪽 Time에 전체 시간이 표시 되는데, 그걸 보면서 적정량을 붙여주시면 됩니다.

그다음 save 하면.. flv 파일로 저장이 됩니다. 시간도 오래 안걸리고 좋았습니다.