[Error] InvalidUseOfMatchersException

김지현·2024년 4월 11일
0

Spring Boot 프로젝트

목록 보기
19/20
post-thumbnail

예외

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);

해결

  1. 모든 인자를 Matchers를 통해 제공하는 방법
when(purchaseFormRepository.findByMemberId(any(), any()))
.thenReturn(purchaseFormPage);
  1. 모든 인자를 일반값으로 제공하는 방법
when(purchaseFormRepository.findByMemberId(memberId, pageable))
.thenReturn(purchaseFormPage);

다음과 같은 방법으로 모두 해결할 수 있다!

0개의 댓글