Class ArgumentMatchers
- java.lang.Object
-
- org.mockito.ArgumentMatchers
-
- Direct Known Subclasses:
Mockito
public class ArgumentMatchers extends Object
Allow flexible verification or stubbing. See alsoAdditionalMatchers
.//stubbing using anyInt() argument matcher when(mockedList.get(anyInt())).thenReturn("element"); //following prints "element" System.out.println(mockedList.get(999)); //you can also verify using argument matcher verify(mockedList).get(anyInt());
Since Mockito
any(Class)
andanyInt
family matchers perform a type check, thus they won't matchnull
arguments. Instead use theisNull
matcher.
The same apply for verification. Scroll down to see all methods - full list of matchers.// stubbing using anyBoolean() argument matcher when(mock.dryRun(anyBoolean())).thenReturn("state"); // below the stub won't match, and won't return "state" mock.dryRun(null); // either change the stub when(mock.dryRun(isNull())).thenReturn("state"); mock.dryRun(null); // ok // or fix the code ;) when(mock.dryRun(anyBoolean())).thenReturn("state"); mock.dryRun(true); // ok
Warning:
If you are using argument matchers, all arguments have to be provided by matchers. E.g: (example shows verification but the same applies to stubbing):verify(mock).someMethod(anyInt(), anyString(), eq("third argument")); //above is correct - eq() is also an argument matcher verify(mock).someMethod(anyInt(), anyString(), "third argument"); //above is incorrect - exception will be thrown because third argument is given without argument matcher.
Matcher methods like
any()
,eq()
do not return matchers. Internally, they record a matcher on a stack and return a dummy value (usually null). This implementation is due to static type safety imposed by java compiler. The consequence is that you cannot useany()
,eq()
methods outside of verified/stubbed method.Additional matchers
The class
AdditionalMatchers
offers rarely used matchers, although they can be useful, when it is useful to combine multiple matchers or when it is useful to negate a matcher necessary.Custom Argument ArgumentMatchers
It is important to understand the use cases and available options for dealing with non-trivial arguments before implementing custom argument matchers. This way, you can select the best possible approach for given scenario and produce highest quality test (clean and maintainable). Please read on in the javadoc for
ArgumentMatcher
to learn about approaches and see the examples.- See Also:
AdditionalMatchers
-
-
Constructor Summary
Constructors Constructor Description ArgumentMatchers()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static <T> T
any()
Matches anything, including nulls and varargs.static <T> T
any(Class<T> type)
Matches any object of given type, excluding nulls.static boolean
anyBoolean()
Anyboolean
or non-nullBoolean
static byte
anyByte()
Anybyte
or non-nullByte
.static char
anyChar()
Anychar
or non-nullCharacter
.static <T> Collection<T>
anyCollection()
Any non-nullCollection
.static double
anyDouble()
Anydouble
or non-nullDouble
.static float
anyFloat()
Anyfloat
or non-nullFloat
.static int
anyInt()
Any int or non-nullInteger
.static <T> Iterable<T>
anyIterable()
Any non-nullIterable
.static <T> List<T>
anyList()
Any non-nullList
.static long
anyLong()
Anylong
or non-nullLong
.static <K,V>
Map<K,V>anyMap()
Any non-nullMap
.static <T> Set<T>
anySet()
Any non-nullSet
.static short
anyShort()
Anyshort
or non-nullShort
.static String
anyString()
Any non-nullString
static <T> T
argThat(ArgumentMatcher<T> matcher)
Allows creating custom argument matchers.static boolean
booleanThat(ArgumentMatcher<Boolean> matcher)
Allows creating customboolean
argument matchers.static byte
byteThat(ArgumentMatcher<Byte> matcher)
Allows creating custombyte
argument matchers.static char
charThat(ArgumentMatcher<Character> matcher)
Allows creating customchar
argument matchers.static String
contains(String substring)
String
argument that contains the given substring.static double
doubleThat(ArgumentMatcher<Double> matcher)
Allows creating customdouble
argument matchers.static String
endsWith(String suffix)
String
argument that ends with the given suffix.static boolean
eq(boolean value)
boolean
argument that is equal to the given value.static byte
eq(byte value)
byte
argument that is equal to the given value.static char
eq(char value)
char
argument that is equal to the given value.static double
eq(double value)
double
argument that is equal to the given value.static float
eq(float value)
float
argument that is equal to the given value.static int
eq(int value)
int
argument that is equal to the given value.static long
eq(long value)
long
argument that is equal to the given value.static short
eq(short value)
short
argument that is equal to the given value.static <T> T
eq(T value)
Object argument that is equal to the given value.static float
floatThat(ArgumentMatcher<Float> matcher)
Allows creating customfloat
argument matchers.static int
intThat(ArgumentMatcher<Integer> matcher)
Allows creating customint
argument matchers.static <T> T
isA(Class<T> type)
Object
argument that implements the given class.static <T> T
isNotNull()
Notnull
argument.static <T> T
isNull()
null
argument.static long
longThat(ArgumentMatcher<Long> matcher)
Allows creating customlong
argument matchers.static String
matches(String regex)
String
argument that matches the given regular expression.static String
matches(Pattern pattern)
Pattern
argument that matches the given regular expression.static <T> T
notNull()
Notnull
argument.static <T> T
nullable(Class<T> clazz)
Argument that is eithernull
or of the given type.static <T> T
refEq(T value, String... excludeFields)
Object argument that is reflection-equal to the given value with support for excluding selected fields from a class.static <T> T
same(T value)
Object argument that is the same as the given value.static short
shortThat(ArgumentMatcher<Short> matcher)
Allows creating customshort
argument matchers.static String
startsWith(String prefix)
String
argument that starts with the given prefix.
-
-
-
Method Detail
-
any
public static <T> T any()
Matches anything, including nulls and varargs.See examples in javadoc for
ArgumentMatchers
classNotes :
- For primitive types use
anyChar()
family orisA(Class)
orany(Class)
. - Since mockito 2.1.0
any(Class)
is not anymore an alias of this method.
- Returns:
null
.- See Also:
any(Class)
,anyChar()
,anyInt()
,anyBoolean()
- For primitive types use
-
any
public static <T> T any(Class<T> type)
Matches any object of given type, excluding nulls.This matcher will perform a type check with the given type, thus excluding values. See examples in javadoc for
ArgumentMatchers
class. This is an alias of:isA(Class)
}Since Mockito 2.1.0, only allow non-null instance of
, thus
null
is not anymore a valid value. As reference are nullable, the suggested API to matchnull
would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.Notes :
- Type Parameters:
T
- The accepted type- Parameters:
type
- the class of the accepted type.- Returns:
null
.- See Also:
any()
,isA(Class)
,notNull()
,isNull()
-
isA
public static <T> T isA(Class<T> type)
Object
argument that implements the given class.See examples in javadoc for
ArgumentMatchers
class- Type Parameters:
T
- the accepted type.- Parameters:
type
- the class of the accepted type.- Returns:
null
.- See Also:
any(Class)
-
anyBoolean
public static boolean anyBoolean()
Anyboolean
or non-nullBoolean
Since Mockito 2.1.0, only allow valued
Boolean
, thusnull
is not anymore a valid value. As primitive wrappers are nullable, the suggested API to matchnull
wrapper would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
false
.- See Also:
isNull()
-
anyByte
public static byte anyByte()
Anybyte
or non-nullByte
.Since Mockito 2.1.0, only allow valued
Byte
, thusnull
is not anymore a valid value. As primitive wrappers are nullable, the suggested API to matchnull
wrapper would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
0
.- See Also:
isNull()
-
anyChar
public static char anyChar()
Anychar
or non-nullCharacter
.Since Mockito 2.1.0, only allow valued
Character
, thusnull
is not anymore a valid value. As primitive wrappers are nullable, the suggested API to matchnull
wrapper would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
0
.- See Also:
isNull()
-
anyInt
public static int anyInt()
Any int or non-nullInteger
.Since Mockito 2.1.0, only allow valued
Integer
, thusnull
is not anymore a valid value. As primitive wrappers are nullable, the suggested API to matchnull
wrapper would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
0
.- See Also:
isNull()
-
anyLong
public static long anyLong()
Anylong
or non-nullLong
.Since Mockito 2.1.0, only allow valued
Long
, thusnull
is not anymore a valid value. As primitive wrappers are nullable, the suggested API to matchnull
wrapper would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
0
.- See Also:
isNull()
-
anyFloat
public static float anyFloat()
Anyfloat
or non-nullFloat
.Since Mockito 2.1.0, only allow valued
Float
, thusnull
is not anymore a valid value. As primitive wrappers are nullable, the suggested API to matchnull
wrapper would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
0
.- See Also:
isNull()
-
anyDouble
public static double anyDouble()
Anydouble
or non-nullDouble
.Since Mockito 2.1.0, only allow valued
Double
, thusnull
is not anymore a valid value. As primitive wrappers are nullable, the suggested API to matchnull
wrapper would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
0
.- See Also:
isNull()
-
anyShort
public static short anyShort()
Anyshort
or non-nullShort
.Since Mockito 2.1.0, only allow valued
Short
, thusnull
is not anymore a valid value. As primitive wrappers are nullable, the suggested API to matchnull
wrapper would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
0
.- See Also:
isNull()
-
anyString
public static String anyString()
Any non-nullString
Since Mockito 2.1.0, only allow non-null
String
. As this is a nullable reference, the suggested API to matchnull
wrapper would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
- empty String ("")
- See Also:
isNull()
-
anyList
public static <T> List<T> anyList()
Any non-nullList
.Since Mockito 2.1.0, only allow non-null
List
. As this is a nullable reference, the suggested API to matchnull
wrapper would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
- empty List.
- See Also:
isNull()
-
anySet
public static <T> Set<T> anySet()
Any non-nullSet
.Since Mockito 2.1.0, only allow non-null
Set
. As this is a nullable reference, the suggested API to matchnull
wrapper would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
- empty Set
- See Also:
isNull()
-
anyMap
public static <K,V> Map<K,V> anyMap()
Any non-nullMap
.Since Mockito 2.1.0, only allow non-null
Map
. As this is a nullable reference, the suggested API to matchnull
wrapper would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
- empty Map.
- See Also:
isNull()
-
anyCollection
public static <T> Collection<T> anyCollection()
Any non-nullCollection
.Since Mockito 2.1.0, only allow non-null
Collection
. As this is a nullable reference, the suggested API to matchnull
would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
- empty Collection.
- See Also:
isNull()
-
anyIterable
public static <T> Iterable<T> anyIterable()
Any non-nullIterable
.Since Mockito 2.1.0, only allow non-null
Iterable
. As this is a nullable reference, the suggested API to matchnull
would beisNull()
. We felt this change would make test harnesses much safer than they were with Mockito 1.x.See examples in javadoc for
ArgumentMatchers
class.- Returns:
- empty Iterable.
- Since:
- 2.1.0
- See Also:
isNull()
-
eq
public static boolean eq(boolean value)
boolean
argument that is equal to the given value.See examples in javadoc for
ArgumentMatchers
class- Parameters:
value
- the given value.- Returns:
0
.
-
eq
public static byte eq(byte value)
byte
argument that is equal to the given value.See examples in javadoc for
ArgumentMatchers
class- Parameters:
value
- the given value.- Returns:
0
.
-
eq
public static char eq(char value)
char
argument that is equal to the given value.See examples in javadoc for
ArgumentMatchers
class- Parameters:
value
- the given value.- Returns:
0
.
-
eq
public static double eq(double value)
double
argument that is equal to the given value.See examples in javadoc for
ArgumentMatchers
class- Parameters:
value
- the given value.- Returns:
0
.
-
eq
public static float eq(float value)
float
argument that is equal to the given value.See examples in javadoc for
ArgumentMatchers
class- Parameters:
value
- the given value.- Returns:
0
.
-
eq
public static int eq(int value)
int
argument that is equal to the given value.See examples in javadoc for
ArgumentMatchers
class- Parameters:
value
- the given value.- Returns:
0
.
-
eq
public static long eq(long value)
long
argument that is equal to the given value.See examples in javadoc for
ArgumentMatchers
class- Parameters:
value
- the given value.- Returns:
0
.
-
eq
public static short eq(short value)
short
argument that is equal to the given value.See examples in javadoc for
ArgumentMatchers
class- Parameters:
value
- the given value.- Returns:
0
.
-
eq
public static <T> T eq(T value)
Object argument that is equal to the given value.See examples in javadoc for
ArgumentMatchers
class- Parameters:
value
- the given value.- Returns:
null
.
-
refEq
public static <T> T refEq(T value, String... excludeFields)
Object argument that is reflection-equal to the given value with support for excluding selected fields from a class.This matcher can be used when equals() is not implemented on compared objects. Matcher uses java reflection API to compare fields of wanted and actual object.
Works similarly to
EqualsBuilder.reflectionEquals(this, other, excludeFields)
from apache commons library.Warning The equality check is shallow!
See examples in javadoc for
ArgumentMatchers
class- Parameters:
value
- the given value.excludeFields
- fields to exclude, if field does not exist it is ignored.- Returns:
null
.
-
same
public static <T> T same(T value)
Object argument that is the same as the given value.See examples in javadoc for
ArgumentMatchers
class- Type Parameters:
T
- the type of the object, it is passed through to prevent casts.- Parameters:
value
- the given value.- Returns:
null
.
-
isNull
public static <T> T isNull()
null
argument.See examples in javadoc for
ArgumentMatchers
class- Returns:
null
.- See Also:
isNotNull()
-
notNull
public static <T> T notNull()
- Returns:
null
.
-
isNotNull
public static <T> T isNotNull()
- Returns:
null
.- See Also:
isNull()
-
nullable
public static <T> T nullable(Class<T> clazz)
Argument that is eithernull
or of the given type.See examples in javadoc for
ArgumentMatchers
class- Parameters:
clazz
- Type to avoid casting- Returns:
null
.
-
contains
public static String contains(String substring)
String
argument that contains the given substring.See examples in javadoc for
ArgumentMatchers
class- Parameters:
substring
- the substring.- Returns:
- empty String ("").
-
matches
public static String matches(String regex)
String
argument that matches the given regular expression.See examples in javadoc for
ArgumentMatchers
class- Parameters:
regex
- the regular expression.- Returns:
- empty String ("").
- See Also:
AdditionalMatchers.not(boolean)
-
matches
public static String matches(Pattern pattern)
Pattern
argument that matches the given regular expression.See examples in javadoc for
ArgumentMatchers
class- Parameters:
pattern
- the regular expression pattern.- Returns:
- empty String ("").
- See Also:
AdditionalMatchers.not(boolean)
-
endsWith
public static String endsWith(String suffix)
String
argument that ends with the given suffix.See examples in javadoc for
ArgumentMatchers
class- Parameters:
suffix
- the suffix.- Returns:
- empty String ("").
-
startsWith
public static String startsWith(String prefix)
String
argument that starts with the given prefix.See examples in javadoc for
ArgumentMatchers
class- Parameters:
prefix
- the prefix.- Returns:
- empty String ("").
-
argThat
public static <T> T argThat(ArgumentMatcher<T> matcher)
Allows creating custom argument matchers.This API has changed in 2.1.0, please read
ArgumentMatcher
for rationale and migration guide. NullPointerException auto-unboxing caveat is described below.It is important to understand the use cases and available options for dealing with non-trivial arguments before implementing custom argument matchers. This way, you can select the best possible approach for given scenario and produce highest quality test (clean and maintainable). Please read the documentation for
ArgumentMatcher
to learn about approaches and see the examples.NullPointerException auto-unboxing caveat. In rare cases when matching primitive parameter types you *must* use relevant intThat(), floatThat(), etc. method. This way you will avoid
NullPointerException
during auto-unboxing. Due to how java works we don't really have a clean way of detecting this scenario and protecting the user from this problem. Hopefully, the javadoc describes the problem and solution well. If you have an idea how to fix the problem, let us know via the mailing list or the issue tracker.See examples in javadoc for
ArgumentMatcher
class- Parameters:
matcher
- decides whether argument matches- Returns:
null
.
-
charThat
public static char charThat(ArgumentMatcher<Character> matcher)
Allows creating customchar
argument matchers. Note thatargThat(org.mockito.ArgumentMatcher<T>)
will not work with primitivechar
matchers due toNullPointerException
auto-unboxing caveat.See examples in javadoc for
ArgumentMatchers
class- Parameters:
matcher
- decides whether argument matches- Returns:
0
.
-
booleanThat
public static boolean booleanThat(ArgumentMatcher<Boolean> matcher)
Allows creating customboolean
argument matchers. Note thatargThat(org.mockito.ArgumentMatcher<T>)
will not work with primitiveboolean
matchers due toNullPointerException
auto-unboxing caveat.See examples in javadoc for
ArgumentMatchers
class- Parameters:
matcher
- decides whether argument matches- Returns:
false
.
-
byteThat
public static byte byteThat(ArgumentMatcher<Byte> matcher)
Allows creating custombyte
argument matchers. Note thatargThat(org.mockito.ArgumentMatcher<T>)
will not work with primitivebyte
matchers due toNullPointerException
auto-unboxing caveat.See examples in javadoc for
ArgumentMatchers
class- Parameters:
matcher
- decides whether argument matches- Returns:
0
.
-
shortThat
public static short shortThat(ArgumentMatcher<Short> matcher)
Allows creating customshort
argument matchers. Note thatargThat(org.mockito.ArgumentMatcher<T>)
will not work with primitiveshort
matchers due toNullPointerException
auto-unboxing caveat.See examples in javadoc for
ArgumentMatchers
class- Parameters:
matcher
- decides whether argument matches- Returns:
0
.
-
intThat
public static int intThat(ArgumentMatcher<Integer> matcher)
Allows creating customint
argument matchers. Note thatargThat(org.mockito.ArgumentMatcher<T>)
will not work with primitiveint
matchers due toNullPointerException
auto-unboxing caveat.See examples in javadoc for
ArgumentMatchers
class- Parameters:
matcher
- decides whether argument matches- Returns:
0
.
-
longThat
public static long longThat(ArgumentMatcher<Long> matcher)
Allows creating customlong
argument matchers. Note thatargThat(org.mockito.ArgumentMatcher<T>)
will not work with primitivelong
matchers due toNullPointerException
auto-unboxing caveat.See examples in javadoc for
ArgumentMatchers
class- Parameters:
matcher
- decides whether argument matches- Returns:
0
.
-
floatThat
public static float floatThat(ArgumentMatcher<Float> matcher)
Allows creating customfloat
argument matchers. Note thatargThat(org.mockito.ArgumentMatcher<T>)
will not work with primitivefloat
matchers due toNullPointerException
auto-unboxing caveat.See examples in javadoc for
ArgumentMatchers
class- Parameters:
matcher
- decides whether argument matches- Returns:
0
.
-
doubleThat
public static double doubleThat(ArgumentMatcher<Double> matcher)
Allows creating customdouble
argument matchers. Note thatargThat(org.mockito.ArgumentMatcher<T>)
will not work with primitivedouble
matchers due toNullPointerException
auto-unboxing caveat.See examples in javadoc for
ArgumentMatchers
class- Parameters:
matcher
- decides whether argument matches- Returns:
0
.
-
-