[Spring] Mokito



Mokito

Unit Test를 위한 java mocking Framework. http://mockito.org/

Mock()

mock()메소드는 mock객체를 만들어서 반환함.

@Test
public void example(){
    Board board = mock(board.class);
    assertTrue( board != null );
}

@Mock

mcok()메소드 외에 annotation을 사용하여 선언할 수 있다.

MockitoAnnotations.initMocks(this);을 이용하여 @Mock 선언된 변수들을 객체로 만들어냄

@Mock
Person p;

@Test
public void example1(){
    MockitoAnnotations.initMocks(this);
    assertTrue(p != null);
}

When()

특정 목 객체를 만들었다면 이 객체로 부터 조건을 지정할 수 있다.

@Test
public void example(){
    Person p = mock(Person.class);
    when(p.getName()).thenReturn("JDM");
    when(p.getAge()).thenReturn(20);
    assertTrue("JDM".equals(p.getName()));
    assertTrue(20 == p.getAge());
}

매개변수가 어떤 값이라도 관계 없다면 any...로 시작하는 메소드를 사용. 만약 특정 값을 넣어야 한다면 eq()

public List<String> getList(String name, int age){ // do something code }

when(mockIns.getList(anyString(), anyInt()))
    .thenReturn(
        new ArrayList<String>(){
            { this.add("JDM"); this.add("BLOG"); }
        }
    );

doThrow()

예외를 던지고 싶을떄 사용함.

@Test(expected = IllegalArgumentException.class)
public void example(){
    Person p = mock(Person.class);
    doThrow(new IllegalArgumentException()).when(p).setName(eq("JDM"));
    String name = "JDM";
    p.setName(name);
}

doNothing()

void 선언된 메소드에 when()을 사용 할떄

@Test
public void example(){
    Person p = mock(Person.class);
    doNothing().when(p).setAge(anyInt());
    p.setAge(20);
    verify(p).setAge(anyInt());
}

verify()

해당 구문이 호출 되었는지를 체크함. 단순한 호출뿐만 아니라 횟수나 타임아웃 시간까지 지정해서 체크해 볼 수 있다.

@InjectMocks

클래스 내부에 다른 클래스를 포함하는 경우에 사용


@Spy

@Spy로 선언된 목 객체는 목 메소드를 별도로 만들지 않는다면 실제 메소드가 호출됨.

Person p = spy(Person.class);
or
Person p = spy(new Person());
or
@Spy Person p;

참고 문서

https://jdm.kr/blog/222