Wie verwende ich Mockito zu verspotten, eine protected-Methode?
Ich bin mit Mockito 1.9.5. Wie kann ich spotten, was ist auf dem Rückweg von einer protected-Methode? Ich habe diese protected-Methode ...
protected JSONObject myMethod(final String param1, final String param2)
{
…
}
Jedoch wenn ich versuche dies zu tun in JUnit:
final MyService mymock = Mockito.mock(MyService.class, Mockito.CALLS_REAL_METHODS);
final String pararm1 = “param1”;
Mockito.doReturn(myData).when(mymock).myMethod(param1, param2);
In der letzten Zeile bekomme ich einen Kompilierungsfehler "Die Methode" meinemethode " ist nicht sichtbar." Wie verwende ich Mockito zu verspotten protected-Methoden? Ich bin offen für ein Upgrade meiner version, wenn das ist die Antwort.
InformationsquelleAutor der Frage Dave | 2015-12-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht ein Problem mit Mockito, aber mit plain old java. Von wo aus Sie anrufen, die Methode, die Sie nicht einsehen können. Das ist, warum es ist eine compile-Zeit-Problem anstatt ein Laufzeit-Problem.
Ein paar Optionen:
InformationsquelleAutor der Antwort John B
Reagieren auf die Anforderung für ein code-Beispiel von option 3 von John B ' s Antwort:
InformationsquelleAutor der Antwort Nyefan
John B ist richtig, das ist, weil die Methode, die Sie versuchen zu testen, ist geschützt, es ist nicht ein problem mit Mockito.
Weitere option auf der Oberseite von denen, die er aufgeführt hat, wäre die reflektion verwenden, um Zugriff auf die Methode. Dies wird Ihnen ermöglichen, um zu vermeiden, ändern die Methode, die Sie testen, und vermeiden Sie das Muster, das Sie verwenden zum schreiben von tests, und speichern Sie diese tests durchführen. Ich habe dies selbst für einige tests, in denen durfte ich nicht ändern Sie den vorhandenen code-Basis, die enthalten eine große Anzahl von privaten Methoden, die benötigt werden, um die Einheit getestet.
Diese links erklären, - Reflexion und-wie zu benutzen es sehr gut, so werde ich Ihnen link und nicht als Kopie:
InformationsquelleAutor der Antwort Seb
WhiteBox.invokeMethod() können hilfreich sein.
InformationsquelleAutor der Antwort Smart Coder