Package org.mockito

Class ArgumentMatchers

  • Direct Known Subclasses:
    Mockito

    public class ArgumentMatchers
    extends Object
    Allow flexible verification or stubbing. See also AdditionalMatchers.
    
     //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) and anyInt family matchers perform a type check, thus they won't match null arguments. Instead use the isNull matcher.

    
     // 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
    
     
    The same apply for verification.

    Scroll down to see all methods - full list of matchers.

    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 use any(), 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
    • 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()
      Any boolean or non-null Boolean
      static byte anyByte()
      Any byte or non-null Byte.
      static char anyChar()
      Any char or non-null Character.
      static <T> Collection<T> anyCollection()
      Any non-null Collection.
      static double anyDouble()
      Any double or non-null Double.
      static float anyFloat()
      Any float or non-null Float.
      static int anyInt()
      Any int or non-null Integer.
      static <T> Iterable<T> anyIterable()
      Any non-null Iterable.
      static <T> List<T> anyList()
      Any non-null List.
      static long anyLong()
      Any long or non-null Long.
      static <K,​V>
      Map<K,​V>
      anyMap()
      Any non-null Map.
      static <T> Set<T> anySet()
      Any non-null Set.
      static short anyShort()
      Any short or non-null Short.
      static String anyString()
      Any non-null String
      static <T> T argThat​(ArgumentMatcher<T> matcher)
      Allows creating custom argument matchers.
      static boolean booleanThat​(ArgumentMatcher<Boolean> matcher)
      Allows creating custom boolean argument matchers.
      static byte byteThat​(ArgumentMatcher<Byte> matcher)
      Allows creating custom byte argument matchers.
      static char charThat​(ArgumentMatcher<Character> matcher)
      Allows creating custom char argument matchers.
      static String contains​(String substring)
      String argument that contains the given substring.
      static double doubleThat​(ArgumentMatcher<Double> matcher)
      Allows creating custom double 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 custom float argument matchers.
      static int intThat​(ArgumentMatcher<Integer> matcher)
      Allows creating custom int argument matchers.
      static <T> T isA​(Class<T> type)
      Object argument that implements the given class.
      static <T> T isNotNull()
      Not null argument.
      static <T> T isNull()
      null argument.
      static long longThat​(ArgumentMatcher<Long> matcher)
      Allows creating custom long 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()
      Not null argument.
      static <T> T nullable​(Class<T> clazz)
      Argument that is either null 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 custom short argument matchers.
      static String startsWith​(String prefix)
      String argument that starts with the given prefix.
    • Constructor Detail

      • ArgumentMatchers

        public ArgumentMatchers()
    • Method Detail

      • 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 match null would be isNull(). We felt this change would make test harnesses much safer than they were with Mockito 1.x.

        Notes :

        • For primitive types use anyChar() family.
        • Since Mockito 2.1.0 this method will perform a type check thus null values are not authorized.
        • Since mockito 2.1.0 any() is no longer an alias of this method.

        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()
        Any boolean or non-null Boolean

        Since Mockito 2.1.0, only allow valued Boolean, thus null is not anymore a valid value. As primitive wrappers are nullable, the suggested API to match null wrapper would be isNull(). 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()
        Any byte or non-null Byte.

        Since Mockito 2.1.0, only allow valued Byte, thus null is not anymore a valid value. As primitive wrappers are nullable, the suggested API to match null wrapper would be isNull(). 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()
        Any char or non-null Character.

        Since Mockito 2.1.0, only allow valued Character, thus null is not anymore a valid value. As primitive wrappers are nullable, the suggested API to match null wrapper would be isNull(). 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-null Integer.

        Since Mockito 2.1.0, only allow valued Integer, thus null is not anymore a valid value. As primitive wrappers are nullable, the suggested API to match null wrapper would be isNull(). 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()
        Any long or non-null Long.

        Since Mockito 2.1.0, only allow valued Long, thus null is not anymore a valid value. As primitive wrappers are nullable, the suggested API to match null wrapper would be isNull(). 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()
        Any float or non-null Float.

        Since Mockito 2.1.0, only allow valued Float, thus null is not anymore a valid value. As primitive wrappers are nullable, the suggested API to match null wrapper would be isNull(). 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()
        Any double or non-null Double.

        Since Mockito 2.1.0, only allow valued Double, thus null is not anymore a valid value. As primitive wrappers are nullable, the suggested API to match null wrapper would be isNull(). 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()
        Any short or non-null Short.

        Since Mockito 2.1.0, only allow valued Short, thus null is not anymore a valid value. As primitive wrappers are nullable, the suggested API to match null wrapper would be isNull(). 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-null String

        Since Mockito 2.1.0, only allow non-null String. As this is a nullable reference, the suggested API to match null wrapper would be isNull(). 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-null List.

        Since Mockito 2.1.0, only allow non-null List. As this is a nullable reference, the suggested API to match null wrapper would be isNull(). 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-null Set.

        Since Mockito 2.1.0, only allow non-null Set. As this is a nullable reference, the suggested API to match null wrapper would be isNull(). 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-null Map.

        Since Mockito 2.1.0, only allow non-null Map. As this is a nullable reference, the suggested API to match null wrapper would be isNull(). 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-null Collection.

        Since Mockito 2.1.0, only allow non-null Collection. As this is a nullable reference, the suggested API to match null would be isNull(). 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-null Iterable.

        Since Mockito 2.1.0, only allow non-null Iterable. As this is a nullable reference, the suggested API to match null would be isNull(). 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()
        Not null argument.

        Alias to isNotNull()

        See examples in javadoc for ArgumentMatchers class

        Returns:
        null.
      • isNotNull

        public static <T> T isNotNull()
        Not null argument.

        Alias to notNull()

        See examples in javadoc for ArgumentMatchers class

        Returns:
        null.
        See Also:
        isNull()
      • nullable

        public static <T> T nullable​(Class<T> clazz)
        Argument that is either null 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 ("").
      • 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.
      • booleanThat

        public static boolean booleanThat​(ArgumentMatcher<Boolean> matcher)
        Allows creating custom boolean argument matchers. Note that argThat(org.mockito.ArgumentMatcher<T>) will not work with primitive boolean matchers due to NullPointerException 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 custom byte argument matchers. Note that argThat(org.mockito.ArgumentMatcher<T>) will not work with primitive byte matchers due to NullPointerException 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 custom short argument matchers. Note that argThat(org.mockito.ArgumentMatcher<T>) will not work with primitive short matchers due to NullPointerException 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 custom long argument matchers. Note that argThat(org.mockito.ArgumentMatcher<T>) will not work with primitive long matchers due to NullPointerException 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 custom float argument matchers. Note that argThat(org.mockito.ArgumentMatcher<T>) will not work with primitive float matchers due to NullPointerException 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 custom double argument matchers. Note that argThat(org.mockito.ArgumentMatcher<T>) will not work with primitive double matchers due to NullPointerException auto-unboxing caveat.

        See examples in javadoc for ArgumentMatchers class

        Parameters:
        matcher - decides whether argument matches
        Returns:
        0.