나의 새로운 컨트롤러를 위해 테스트 코드를 위와 같이 작성해주었다.
mvc perform으로 해당 url에 대해 컨트롤러에 메서드가 잘 연결되어 있는지를 검사하고 있고,
verify를 사용해서 컨트롤러에서 해당 서비스의 메소드를 호출 하고 있는지 보고있다.
서비스 코드의 bulkupdate가 컨트롤러에서 실행 되기를 기대하고있다.
그런데 테스트 코드에 오류가 발생한다.
invalid use of argument matcher 라는 문구와 함께 오류가 발생한다.
나는 이러한 오류의 원인을 찾기 위해 stack overflow에서 비슷한 문제를 겪은 사람을 찾았다.
https://stackoverflow.com/questions/16458136/mockito-invalid-use-of-argument-matchers
비슷한 맥락의 코드에 대한 답변은 위와 같은데, 서비스 메서드에 인자를 넘겨줄 때 argumentmatcher를 한 인자에 사용하면 다른 모든 인자도 argumentmatcher로 넘겨주어야 한다는 것이다.
argumentmatcher는 아래 의 링크에 설명되어있다.
https://www.baeldung.com/mockito-argument-matchers
mock객체를 설정하는 다양한 방법이 있는데 그중 하나가 고정된 변수를 넘겨주는 것이다.
doReturn("Flower" <-고정변수).when(flowerService).analyze("poppy" <-고정 변수);
이런 식으로 flowerService mock 객체는 오로지 poppy라는 인자가 넘어왔을 때에만 Flower 를 리턴한다.
그러나 좀더 다양한 인자에 대해서 테스트를 하고 싶을 때 eq나 any같은 argumentmatcher를 사용하는 것이다.
any와 eq에 관한 내용은 아래 링크를 참조하길 바란다.
https://www.journaldev.com/21876/mockito-argument-matchers-any-eq
argumentmatcher를 모든 인자에 적용해야 한다는 사실을 알았으므로 코드를 고쳐보았다.
테스트는 성공한다.