Ich versuche, eine DateFormat-Klasse zu verspotten, da sie im Rahmen meines Komponententests keinen Zweck hat. Ich verwende die Bibliothek org.mockito.Mockito.Verspotten einer DateFormat-Klasse im Junit-Test
Code Folgende:
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.any;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.junit.Before;
public class someTest {
@Mock
DateFormat formatter;
@Before
public void before() {
MockitoAnnotations.initMocks(this);
when(formatter.format(any(Date.class))).thenReturn("2017-02-06");
}
}
Gibt folgende Fehler:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Invalid use of argument matchers! 3 matchers expected, 1 recorded:
-> at someTest.before(someTest.java:33)
This exception may occur if matchers are combined with raw values: //incorrect: someMethod(anyObject(), "raw String"); When using matchers, all arguments have to be provided by matchers. For example: //correct: someMethod(anyObject(), eq("String by matcher"));
For more info see javadoc for Matchers class.
at java.text.DateFormat.format(Unknown Source)
at someTest.before(someTest.java:33)
Wie verspotten wir die Dateformat-Klasse in einem richtigen Weg?
Wäre es nicht genauso einfach, eine echte Instanz zu erstellen? 'formatter = new SimpleDateFormat ('' 2017-02-06 '');' –
@AndyTurner Was ist der Vorteil einer realen Instanz im Vergleich zu einem Mocked-Objekt? – henrik
Ich werde diese Frage an Sie wenden: Was glauben Sie, gewinnen Sie, indem Sie dieses Objekt verspotten, anstatt eine echte Instanz zu benutzen? –