반응형
단위테스트 도중 특정 메소드의 인자 값을 중간에 검증하고 싶을 때가 있다.
그럴 때, ArgumentCaptor 를 이용하면 된다.
ArgumentCaptor
- 특정 메소드가 실행될 때, 인자를 가로채서 저장하는 기능
- 가로챈 인자를 검증해서 테스트가 가능
사용 방법
ArgumentCaptor<T> argumentCaptor = ArgumentCaptor.forClass(T.class);
- 가로챌 인자의 타입을 T라고 할 때의 선언 방법은 위와 같다.
- Collection 프레임워크(List, Array)도 가능하다.
- 2개 이상의 인자를 가로채고 싶다면, ArgumentCaptor를 그만큼 정의해서 사용하면 된다.
...
@Test
void test() {
// given
int number = 7;
// action
numberService.save(number);
// verify
ArgumentCaptor<Integer> argumentCaptor = ArgumentCaptor<Integer.class>();
verify(numberRepository, times(1)).insert(argumentCaptor.capture());
// then
// number와 argumentCaptor에서 가로챈 값이 동일한 지 확인
assertThat(number, is(argumentCaptor.getValue()));
}
- number.save() 메서드 안에는 numberRepository.insert() 메서드가 포함되어 있다.
- numberService.save()가 실행되면, numberRepository.insert() 메서드가 실행되고, 이를 ArgumentCaptor가 가로챈다.
verify
verify(T t, VerificationMode verificationMode).method();
- T.method() 가 특정 조건으로 실행됐는 지 검증하는 부분
- method()의 인자에 ArguemntCaptor.capture() 를 넣어주면, 인자 값을 ArgumentCaptor에 저장할 수 있다.
- VerificationMode
- times(int n) : 정확히 n번 실행했는 지 확인 (많거나 적으면 실패)
- atMost(int n) : 최대 n번 실행했는 지 확인
- atLeast(int n) : 최소 n번 실행했는 지 확인
- never() : 실행하지 않았는 지 확인 (실행하면 실패)
- atLeastOnce() : 한 번이라도 실행했는 지 확인
반응형
'BE > Java' 카테고리의 다른 글
[Java] Reflection? (0) | 2023.12.25 |
---|---|
[Java] Jacoco 간단하게 사용해보기 (Maven) (0) | 2023.07.08 |
[Java 8] Annotation, sort, Metaspace (0) | 2023.05.04 |
[Java 8] Concurrent Programming (0) | 2023.04.29 |
[Java 8] Date / Time (0) | 2023.04.21 |