콘텐츠로 건너뛰기

테스트케이스에서 파라미터(argument) 체크하기

Mockito에서 mock의 동작을 정의하기 위해 when…thenReturn 구문을 많이 사용한다.

보통, 유연성있는 테스트를 위해서 아래와 같이 코딩을 하게 된다.

위처럼 하게 되면, 어떤 int형태가 들어와도 product를 리턴하게 된다.

물론, 100원을 내더라도 커피를 받을 수 있게 된다.

그래서 테스트를 좀더 강하게 하기 위해서는 특정 파라미터 값을 체크한다.

예를 들면,

위의 경우에는 charge가 3000인 경우에만 when…thenReturn 구문이 동작한다.

만약 3000 이외의 값이 들어오면, null을 리턴하거나 NPE를 발생시켜서 오류임을 확인할 수 있다.

그런데, 만약 기본 자료형(int, long, String 등)이 아니라 객체형이라면 문제가 발생한다.

테스트케이스에서 new Date()로 객체를 새로 생성하기 때문에, 실제 코드에서의 today와 레퍼런스가 다르다.

그래서 분명 today임에도 불구하고 null을 리턴하게 된다.

그래서 제일 위처럼 유연성있게 수정하면, 아래처럼 된다.

당연히 문제가 있다.

특히 파라미터 값을 민감하게 확인해야 하는 경우에는 더욱 그렇다.

즉, 파라미터를 검증하되 레퍼런스가 아니라 내부 값을 이용해서 확인을 해야만 한다.

그래서 mockito에서 ArgumentMatcher를 제공하고 있다.

완성된 코드는 아래와 같다.

ArgumentMatcher를 상속받은 내부 클래스를 생성하고, matches 메소드를 오버라이딩한다.

새로 생성된 custom matcher 클래스를 이용해서 argThat으로 확인하면 된다.

참 쉽다^^

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다