티스토리 뷰

Mockito 를 사용하면서, 어떤 Mock method가 자신이 받은 인자를 그대로 반환하길 기대하고 싶은 때가 있다. 

1. Iterable이 아닌 인자의 경우

배열, 리스트 같이 Iterable 이 아닌 객체에 적용하는 방법이다

when(Mock메소드(any(인자의 타입))).thenAnswer(AdditionalAnswers.returnsFirstArg)); 

이 예시의 경우에는 AdditionalAnswers.returnsFirstArg 이기 때문에, 첫 번째 인자를 반환한다.

이 외에도,

두 번 째 인자나, n 번 째, 마지막 등등 여러 메소드를 제공해주고 있다.

 

2. Iterable인 인자의 경우

Iterable은 주로 Generic 을 사용해서 구현되어 있기 때문에 1 처럼 할 수 없다.

이 경우에는, Answer을 구현해서 인자로 넣어주어야 한다.

위와 같이, mock method에는 any() 를 넣어주고, thenAnswer에 위와 같이 구현해주어야 한다.

참고로, menuOrderRepository는 아래와 같이 JpaRepository의 구현체이다. 

따라서, saveAll의 시그니처는 saveAll(Iterable<MenuOrder> entity) 이다.

 

댓글