Mockito mock alle Methoden aufrufen und zurück
Ich habe ein problem beim schreiben von unit-Tests mit mock. Es ist ein Objekt, das ich müssen zu verspotten, haben eine Menge getter, was ich Tue, nennen Sie den code. Diese werden jedoch nicht der Zweck von meinen unit-test. So, es ist eine Möglichkeit, ich kann mock alle Methoden anstelle von mock.
Hier ist der code, Beispiel:
public class ObjectNeedToMock{
private String field1;
...
private String field20;
private int theImportantInt;
public String getField1(){return this.field1;}
...
public String getField20(){return this.field20;}
public int getTheImportantInt(){return this.theImportantInt;}
}
- und das ist der service Klasse, die ich brauche, um zu testen
public class Service{
public void methodNeedToTest(ObjectNeedToMock objectNeedToMock){
String stringThatIdontCare1 = objectNeedToMock.getField1();
...
String stringThatIdontCare20 = objectNeedToMock.getField20();
//do something with the field1 to field20
int veryImportantInt = objectNeedToMock.getTheImportantInt();
//do something with the veryImportantInt
}
}
innerhalb der test-Klasse, die test-Methode ist wie
@Test
public void testMethodNeedToTest() throws Exception {
ObjectNeedToMock o = mock(ObjectNeedToMock.class);
when(o.getField1()).thenReturn(anyString());
....
when(o.getField20()).thenReturn(anyString());
when(o.getTheImportantInt()).thenReturn("1"); //This "1" is the only thing I care
}
So, gibt es eine Möglichkeit, die ich vermeiden kann, schreiben alle "wenn" für das nutzlose "Feld1" bis "field20"
Du musst nicht, wenn du bist gut mit der Rückgabe null.
Ich brauche, um Sie in die Methode, sorry für nicht in diesem Beispiel.
Ich brauche, um Sie in die Methode, sorry für nicht in diesem Beispiel.
InformationsquelleAutor jasonfungsing | 2014-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Standard-Antworten, Ihrer zu spotten. Wenn Sie beim erstellen der mock, Verwendung:
Nein, Sie nicht. In diesem Fall bist du die Einstellung der Standard-Verhalten von Ihr verspottet Objekt. In der Tat, wenn Sie anrufen
doReturn(...).when()
Sie werden überschreiben Sie diese Vorgabe mit der neuen custom-stub. Es ist also nützlich, wenn Sie Sie brauchen, um das Verhalten einer Methode, während andere noch die Standardwerte zurück. BTW, ich habe aktualisiert mein Antwort.Sie können auch einfach tun
mock(ObjectNeedToMock.class, RETURNS_DEFAULTS);
Keine lambda benötigt.InformationsquelleAutor SimY4
Wenn Sie nicht daran interessiert, das Ergebnis
getField1()
zugetField20()
in einem bestimmten test Fall sollten Sie nicht verspotten. In anderen Worten, wenn alle spezifischen Testfall besorgt sein sollte istgetTheImportantInt()
, dann ist dein Testfall sollte wie folgt Aussehen:Gut, dann hängt es. Wenn das, was Sie tun, mit Feld1, field20 wirkt sich auf das Ergebnis Sie überprüft haben, in der Prüfung, haben Sie keine Wahl aber, um die Werte mock. Ansonsten kann man immer noch ignorieren Sie, nachdem alle, alles, was Sie interessiert sind bei der Prüfung ist davon nicht betroffen. Auf einer anderen Anmerkung, wenn Sie eine Klasse mit 20 Getter, sollten Sie wirklich verbessern das design (auch wenn es eine entity-Klasse, lohnt es sich wahrscheinlich, die Neugestaltung der DB-Tabelle enthalten weniger Spalten, wie lange Zeilen in SQL-DBs beeinträchtigen die Leistung drastisch in den meisten DBs).
Ich bin ein Glückspilz, dass diese 20 Getter-Objekt ein json-response-mapping-Klasse aus einer 3rd-party-restful api-Aufruf 🙂
Wie ich bereits erwähnt, Sie haben keine echten Optionen andere als lustig das ganze. Wenn Sie nicht wirklich über die Werte, die Sie ergreifen können, den Ansatz in die andere Antwort, und definieren Sie Standardwerte. Wenn Sie dies tun, könnten Sie besser dran, mit ein-Helfer-Methode, erstellen Sie ein mock und stub jeder seine Methoden mit einem Wert, den Sie als parameter an die helper-Methode. In anderen Worten, anstatt 20
when
Zeilen des Codes, müssen Sie einen einzigen Methoden-Aufruf der helper-Methode mit 20 Parametern.InformationsquelleAutor eitanfar