위 스크린샷에서 볼 수 있는 오류는 Mockito의 argument matcher를 잘못 사용했을 때 발생하는 것이다.
Mockito에서는 any()
, eq()
, isNull()
과 같은 argument matcher들을 제공하는데, 이러한 matcher를 사용할 때 주의해야 할 점이 있다.
바로!! 한 메서드 호출에서 argument matcher를 사용하기 시작하면 그 메서드의 모든 인자에 대해 matcher를 사용해야한다는 것이다. 그렇지 않으면 위의 오류가 발생하게 된다.
someMethod(someValue, "raw String");
여기서 첫 번째 인자에 대해 any()
matcher를 사용하려고 한다면 두 번째 인자에 대해서도 matcher를 사용해야 한다.
someMethod(any(), eq("raw String"));
해결
when(boardService.createBoard(any(BoardCreateRequestDto.class))).thenReturn(BoardCreateResponseDto.builder()
.boardName("boardName")
.boardColor("boardColor")
.boardInfo("boardInfo")
.build());
any()
any()
는 어떤 종류의 값이던지 받아들이는 matcher이다.someMethod(any())
는 someMethod
가 어떤 인자로 호출되더라도 통과되는 조건을 나타낸다.eq()
eq()
는 특정 값을 기대하는 matcher이다. someMethod(eq("specificValue"))
는 someMethod
가 "specificValue"라는 문자열 인자와 함께 호출될 때만 통과되는 조건을 나타낸다.isNull()
isNull()
은 null 값을 기대하는 matcher이다.someMethod(isNull())
는 someMethod
가 null 인자와 함께 호출될 때만 통과되는 조건을 나타낸다.