본문 바로가기

Java/Test

(Test) Mock 객체 Stubbing

모든 Mock 객체의 행동

  • Null을 리턴한다. (Optional 타입은 Optional.empty 리턴)

Optional<Member> optional = memberService.findById(1L);
assertNull(optional);

실행결과

  • Primitive 타입은 기본 Primitive 값.

  • 콜렉션은 비어있는 콜렉션.

  • Void 메소드는 예외를 던지지 않고 아무런 일도 발생하지 않는다.

memberService.validate(1L);
  • 아무일도 일어나지 않는다.

Stubbing

특정 객체(원하는 객체) 를 리턴하게끔 설계하는? 방법 

Member member = new Member();
member.setId(1L);
member.setEmail("rownsdn912@gmail.com");

나는 이러한 객체에 대한 리턴 값을 원한다!

 

memberService의 id가 1L일때 위의 인스턴스에 정의된 객체를 리턴해준다.

when(memberService.findById(1L)).thenReturn(Optional.of(member));

(테스트)

memberService의 id가 1L일때 해당 값이 제대로 찍히는지 테스트

Optional<Member> findbyId = memberService.findById(1L);
assertEquals("rownsdn912@gmail.com", findbyId.get().getEmail());

실행결과 정상

파라미터에 상관없이 테스트하는 방법 (위의 경우에는 1L을 파라미터로 던져야만 테스트가 성공한다.)

- with any()

when(memberService.findById(any())).thenReturn(Optional.of(member));

https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#3

 

Mockito - mockito-core 3.2.4 javadoc

Latest version of org.mockito:mockito-core https://javadoc.io/doc/org.mockito/mockito-core Current version 3.2.4 https://javadoc.io/doc/org.mockito/mockito-core/3.2.4 package-list path (used for javadoc generation -link option) https://javadoc.io/doc/org.m

javadoc.io


예외를 던지는 방법 (when, doThrow, assertThrows)

  • when : memberService의 id가 1L 경우 예외 발생 - 리턴타입이 있는 메서드를 확인할때

when(memberService.findById(1L)).thenThrow(new RuntimeException());
  • doThrow : 예외를 던지는 경우는 memberService의 id가 1L 경우
doThrow(new RuntimeException()).when(memberService).validate(1L);
  • assertThrows : 예외를 던진다 memberService의 id가 1L 경우
assertThrows(IllegalArgumentException.class, ()->{
    memberService.validate(1L);
});

메소드가 동일한 매개변수로 여러번 호출될 때

 

여러번 호출 시 각기 다르게 호출하도록 조작할 수 있다.

//1번째 호출
assertEquals("rownsdn912@gmail.com",byId.get().getEmail());
//2번째 호출
assertThrows(RuntimeException.class, () -> {
   memberService.findById(2L);
});
//3번째 호출
assertEquals(Optional.empty(), memberService.findById(3L));

코드 참조

https://github.com/mike6321/PURE_JAVA/tree/master/HowToTest/inflearn-the-java-test

 

mike6321/PURE_JAVA

Contribute to mike6321/PURE_JAVA development by creating an account on GitHub.

github.com

 

'Java > Test' 카테고리의 다른 글

(Test) BDD 스타일 Mockito API  (0) 2020.01.05
(Test) Mock 객체 확인  (0) 2020.01.05
(Test) Mock 객체 만들기  (0) 2020.01.05
(Test) Mockito 란?  (0) 2020.01.01
(Test) JUit5 - JUnit4 Migration  (0) 2020.01.01