⚡ 생각대로 살지 않으면 사는대로 생각한다.
⚡ 나는 어차피 잘 될 놈이다. 이미 잘 되고 있고, 계속해서 잘 되고 있다.
모든 Mock 객체의 행동
테스트 코드에서 다음과 같은 코드가 있다고 가정하면,
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을 던져라.
는 의미
-끝-