mockito 서비스 테스트 중 다음과 같은 오류가 발생하였다.
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(any(), "raw String");
이 예외는 Matchers를 사용할 때, 모든 인자가 Matchers를 통해 제공되어야 한다는 것을 나타낸다. 즉, someMethod(any(), "raw String")
와 같이 Mathcers와 일반 값이 혼합되어 사용될 경우 Mockito가 인자를 해석하는 방법을 판단하기 어려워지기 때문에 예외가 발생할 수 있다. Matchers를 사용하면 Mockito는 해당 인자를 동적으로 해석하여 매치하려는 값을 결정한다. 하지만 Matchers와 일반 값이 함께 사용되면 Mockito는 어떤 값을 Matchers로 해석해야 할지 알 수 없다. 따라서 이런 경우에는 모든 인자를 Matchers로 제공하여 Mockito가 올바르게 인자를 해석할 수 있도록 해야 한다.
나의 경우 다음과 같이 findByMemberId의 인자로 Mathchers any()와 일반 값 pageable 객체가 혼합되어 전달되면서 예외가 발생했다.
Page<PurchaseForm> purchaseFormPage = new PageImpl<>(purchaseFormList);
Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "createdAt"));
when(purchaseFormRepository.findByMemberId(any(), pageable))
.thenReturn(purchaseFormPage);
when(purchaseFormRepository.findByMemberId(any(), any()))
.thenReturn(purchaseFormPage);
when(purchaseFormRepository.findByMemberId(memberId, pageable))
.thenReturn(purchaseFormPage);
다음과 같은 방법으로 모두 해결할 수 있다!