⚡ 생각대로 살지 않으면 사는대로 생각한다.
⚡ 나는 어차피 잘 될 놈이다. 이미 잘 되고 있고, 계속해서 잘 되고 있다.


모든 Mock 객체의 행동

  • Null을 리턴한다. (Optional 타입은 Optional.empty 리턴)
  • Primitive 타입은 기본 Primitive 값.
  • 콜렉션은 비어있는 콜렉션.
  • Void 메소드는 예외를 던지지 않고 아무런 일도 발생하지 않는다.

테스트 코드에서 다음과 같은 코드가 있다고 가정하면,


Memebr member = new Member();
member.setId(1L);
member.setEmail("SsangSoo@github.com);

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

코드 설명
memberService.findById(1L); 이 메서드가 호출될 때(when),
Optional.of(member)) 값을 반환해라(thenReturn)
는 의미이다.

  • when 부분에서 1L로 들어가는 값에 any()를 넣어주면, 아무 값이나 들어간다. 그러면 어떤 값을 넣어도 같은 객체가 나오도록 되어있다.
    이 부분의 밑에 참고 레퍼런스의 Argument matchers 쪽에서 보다 자세히 확인 가능하다!

💡유의할 부분은 반드시 1L이 들어가야 thenReturn()의 값에 들어간 값이 나온다. 1이 아니라 다른 값이 들어가면 아무 일도 일어나지 않는다.

  • Mock 객체를 조작해서 특정한 매개변수를 받은 경우 특정한 값을 리턴하거나 예외를 던지도록 만들 수 있다.

  • Void 메소드 특정 매개변수를 받거나 호출된 경우 예외를 발생 시킬 수 있다.

  • 메서드가 동일한 매개변수로 여러번 호출될 때 각기 다르게 행동호도록 조작할 수도 있다.

when(memberService.findById(any()))
	.thenReturn(Optional.of(member))
    .thenThrow(new RuntimeException())
    .thenReturn(Optional.empty())
;

Optional<Member> byId = memberService.findById(1L);
assertEquals("SsangSoo@github.com", byId.get().getEmail());

assertThrows(RuntimeException.class, () -> {
	memberService.findById(2L);
});

assertEquals(Optional.empty(), memberService.findById(3L));

이런 식으로 사용가능하다.
when쪽을 설정해놓고, 아래에서 테스트를 수행하게 하면 된다.


then메서드설명
thenThrow()when의 값이 나올 때 예외를 던져라
thenReturn()when의 값이 나올 때 지정한 값(stub 값)을 반환해라

void 메서드설명
doThrow()지정한 예외를 던져라.

doThrow()예시.

doThrow(IllegalArgumentException())
	.when(memberService).validate(1L);

1이라는 값으로 memberService의 validate 메서드를 호출하게 되면, IllegalAr gumentException을 던져라.는 의미


-끝-

profile
쌩수 Git >> https://github.com/SsangSoo?tab=repositories

0개의 댓글