argThat
람다
이것이 인수 검증에 실패하는 방법입니다.
verify(mock).mymethod(argThat(
(x)->false
));
어디
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
argThat
더하기 주장
위의 테스트는 "say" Expected: lambda$... Was: YourClass.toSting...
입니다. 람다에서 어설 션을 사용하면 더 구체적인 실패 원인을 얻을 수 있습니다.
verify(mock).mymethod(argThat( x -> {
assertThat(x).isNotNull();
assertThat(x.description).contains("KEY");
return true;
}));
그러나이 방법은 1 가지 방법으로 만 작동합니다. 확인 된 메소드가 2 번 이상 호출되면 mockito는 모든 호출 된 조합을 각 검증기로 전달합니다. 따라서 mockito는 검증자가 true
인수 세트 중 하나에 대해 자동으로 리턴 false
하고 다른 유효한 호출에 대해서는 (어설 션 예외 없음)을 기대합니다. 그 기대는 1 개의 메소드 호출에 문제가되지 않습니다. 단순히 1 번 반환해야합니다.
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
이제 테스트 결과는 다음과 같습니다 Expected: Obj.description to contain 'KEY'. Was: 'Actual description'
.. 참고 : assertJ
어설 션을 사용했지만 어떤 어설 션 프레임 워크를 사용할지는 사용자에게 달려 있습니다.
argThat
여러 인수로.
을 사용 argThat
하면 모든 인수 에 일치 항목이 제공되어야합니다. 예 :
verify(mock).mymethod(eq("VALUE_1"), argThat((x)->false));
// above is correct as eq() is also an argument matcher.
verify(mock).mymethod("VALUE_1", argThat((x)->false));
// above is incorrect; an exceptoin will be thrown, as the fist arg. is given without an argument matcher.
어디:
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
eq
매처
인수가 같은지 확인하는 가장 쉬운 방법 :
verify(mock).mymethod(eq(expectedValue));
// NOTE: ^ where the parentheses must be closed.
직접 논증
심판에 의한 비교가 허용되는 경우 다음으로 진행하십시오.
verify(mock).mymethod(expectedArg);
// NOTE: ^ where the parentheses must be closed.
최초의 질문 실패의 근본 원인은 잘못된 본당의 장소였습니다 verify(mock.mymethod...
. 그건 틀렸어 올바른 것은 :verify(mock).*