org.mockito
Class AdditionalAnswers

java.lang.Object
  extended by org.mockito.AdditionalAnswers

public class AdditionalAnswers
extends java.lang.Object

Additional answers provides factory methods for less common answers.

Currently offer answers that can return the parameter of an invocation at a certain position.

See factory methods for more information : returnsFirstArg(), returnsSecondArg(), returnsLastArg() and returnsArgAt(int)

Since:
1.9.5

Constructor Summary
AdditionalAnswers()
           
 
Method Summary
static
<T> Answer<T>
delegatesTo(java.lang.Object delegate)
          An answer that directly forwards the calls to the delegate.
static
<T> Answer<T>
returnsArgAt(int position)
          Returns the parameter of an invocation at the given position.
static
<T> Answer<T>
returnsElementsOf(java.util.Collection<?> elements)
          Returns elements of the collection.
static
<T> Answer<T>
returnsFirstArg()
          Returns the first parameter of an invocation.
static
<T> Answer<T>
returnsLastArg()
          Returns the last parameter of an invocation.
static
<T> Answer<T>
returnsSecondArg()
          Returns the second parameter of an invocation.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AdditionalAnswers

public AdditionalAnswers()
Method Detail

returnsFirstArg

public static <T> Answer<T> returnsFirstArg()
Returns the first parameter of an invocation.

This additional answer could be used at stub time using the then|do|willAnswer methods. For example :

given(carKeyFob.authenticate(carKey)).will(returnsFirstArg());
 daAnswer(returnsFirstArg()).when(carKeyFob).authenticate(carKey)

Type Parameters:
T - Return type of the invocation.
Returns:
Answer that will return the first argument of the invocation.
Since:
1.9.5

returnsSecondArg

public static <T> Answer<T> returnsSecondArg()
Returns the second parameter of an invocation.

This additional answer could be used at stub time using the then|do|willAnswer methods. For example :

given(trader.apply(leesFormula, onCreditDefaultSwap)).will(returnsSecondArg());
 daAnswer(returnsSecondArg()).when(trader).apply(leesFormula, onCreditDefaultSwap)

Type Parameters:
T - Return type of the invocation.
Returns:
Answer that will return the second argument of the invocation.
Since:
1.9.5

returnsLastArg

public static <T> Answer<T> returnsLastArg()
Returns the last parameter of an invocation.

This additional answer could be used at stub time using the then|do|willAnswer methods. For example :

given(person.remember(dream1, dream2, dream3, dream4)).will(returnsLastArg());
 daAnswer(returnsLastArg()).when(person).remember(dream1, dream2, dream3, dream4)

Type Parameters:
T - Return type of the invocation.
Returns:
Answer that will return the last argument of the invocation.
Since:
1.9.5

returnsArgAt

public static <T> Answer<T> returnsArgAt(int position)
Returns the parameter of an invocation at the given position.

This additional answer could be used at stub time using the then|do|willAnswer methods. For example :

given(person.remember(dream1, dream2, dream3, dream4)).will(returnsArgAt(3));
 daAnswer(returnsArgAt(3)).when(person).remember(dream1, dream2, dream3, dream4)

Type Parameters:
T - Return type of the invocation.
Returns:
Answer that will return the second argument of the invocation.
Since:
1.9.5

delegatesTo

public static <T> Answer<T> delegatesTo(java.lang.Object delegate)
An answer that directly forwards the calls to the delegate.

Useful for spies or partial mocks of objects that are difficult to mock or spy using the usual spy API. Possible use cases:

For more details including the use cases reported by users take a look at issue 145.

The difference with the regular spy:

An example with a final class that we want to delegate to:


   final class DontYouDareToMockMe implements list { ... }

   DontYouDareToMockMe awesomeList = new DontYouDareToMockMe();

   List mock = mock(List.class, delegatesTo(awesomeList));
 

This feature suffers from the same drawback as the spy. The mock will call the delegate if you use regular when().then() stubbing style. Since the real implementation is called this might have some side effects. Therefore you should to use the doReturn|Throw|Answer|CallRealMethod stubbing style. Example:


   List listWithDelegate = mock(List.class, AdditionalAnswers.delegatesTo(awesomeList));

   //Impossible: real method is called so listWithDelegate.get(0) throws IndexOutOfBoundsException (the list is yet empty)
   when(listWithDelegate.get(0)).thenReturn("foo");

   //You have to use doReturn() for stubbing
   doReturn("foo").when(listWithDelegate).get(0);
 

Parameters:
delegate - The delegate to forward calls to.
Returns:
the answer
Since:
1.9.5

returnsElementsOf

public static <T> Answer<T> returnsElementsOf(java.util.Collection<?> elements)
Returns elements of the collection. Keeps returning the last element forever. Might be useful on occasion when you have a collection of elements to return.


   //this:
   when(mock.foo()).thenReturn(1, 2, 3);

   //is equivalent to:
   when(mock.foo()).thenReturn(new ReturnsElementsOf(Arrays.asList(1, 2, 3)));
 

Parameters:
elements - The collection of elements to return.
Returns:
the answer
Since:
1.9.5