[java] Mockito를 사용하여 특정 메소드 호출 시 인자들이 지정한 범위 내의 값인지 확인하는 방법은?
import org.mockito.ArgumentMatcher;
public class RangeArgumentMatcher<T extends Comparable<T>> implements ArgumentMatcher<T> {
private final T lower;
private final T upper;
public RangeArgumentMatcher(T lower, T upper) {
this.lower = lower;
this.upper = upper;
}
@Override
public boolean matches(T argument) {
return argument.compareTo(lower) >= 0 && argument.compareTo(upper) <= 0;
}
}
위의 코드는 Mockito에서 사용할 수 있는 ArgumentMatcher
구현체인 RangeArgumentMatcher
클래스입니다. 이 클래스는 주어진 범위 내의 값인지 확인하기 위해 사용됩니다.
이제 Mockito를 사용하여 실제 테스트에서 이 RangeArgumentMatcher
를 활용해보겠습니다. 예를 들어, 다음과 같은 메소드가 있는 Calculator
클래스가 있다고 가정해봅시다.
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}
그리고 이 메소드의 호출 시 인자들이 특정 범위 내에 있는지 확인하는 테스트를 작성해보겠습니다.
import org.junit.Test;
import org.mockito.Mockito;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
public class CalculatorTest {
@Test
public void testAddWithInRange() {
Calculator calculator = Mockito.mock(Calculator.class);
when(calculator.add(argThat(new RangeArgumentMatcher<>(10, 100)), anyInt()))
.thenReturn(42);
int result = calculator.add(50, 5);
assertEquals(42, result);
verify(calculator).add(argThat(new RangeArgumentMatcher<>(10, 100)), anyInt());
}
}
위의 코드에서 when
구문을 사용하여 Calculator
클래스의 add
메소드를 호출할 때 첫 번째 인자가 10부터 100 사이의 값인지 확인하도록 설정했습니다. 그리고 thenReturn
을 사용하여 이 테스트 시나리오에서 add
메소드가 호출될 때 42를 반환하도록 설정했습니다.
마지막으로, assertEquals
를 사용하여 실제 결과와 기대하는 결과가 일치하는지 확인하고, verify
를 사용하여 add
메소드가 RangeArgumentMatcher
와 함께 호출되는지 검증합니다.
이렇게 Mockito의 ArgumentMatcher
와 RangeArgumentMatcher
를 활용하여 특정 메소드 호출 시 인자들이 지정한 범위 내의 값인지 확인할 수 있습니다.
참고문서: