Mockito NotaMockException
Ich bin vor ein Problem mit junit Mockito testen. Ich bin neu und bin ein bisschen verwirrt mit dem problem bin ich vor. Jede Hilfe auf diesem würde geschätzt.
class Activity{
public void firstMethod(){
String str = secondMethod();
}
public String secondMethod(){
String str = null;
/* some Code */
return str;
}
}
Erste Ausnahme :
*org.mockito.exceptions.misusing.NotAMockException:
Argument passed to when() is not a mock!*
in den code unten
class ActivityTest(){
Activity act;
@Before
public void setup(){
act = new Activity();
}
@Test
public void testFirstMethod(){
Mockito.doReturn(Mockito.anyString()).when(act).secondMethod();
act.firstMethod();
verify(act).secondMethod();
}
}
Ich bin mir bewusst, dass die Aktivität nicht verspotten, aber ich bin nicht sicher, für einen Weg, um dieses als secondMethod()
ist eine Methode in der gleichen Klasse. Muss ich schreiben, Regel für secondMethod()
als ich bereits getan haben, seine Unit-Tests. Die definition von secondMethod()
besteht, hat externe Abhängigkeiten. Sollte ich Sie verspotten die externen Abhängigkeiten vorhanden in secondMethod()
schreiben und Regeln für Sie eher als Regel für secondMethod()
?
Fand ich diesen Beitrag:
Mockito Spy ' Ing auf dem Objekt als Einheit getestet
Jedoch die Trennung der secondMethod() in einer anderen Klasse nicht sinnvoll. Meine Methode bezieht sich auf diese Klasse. Erstellen einer anderen Klasse für die Prüfung scheint nicht richtig zu mir. Auch die Verspottung der aktuellen Klasse mit spy() ist nicht die richtige Art und Weise, wie bereits in der post erklärt.
Ich glaube nicht, dass ich sein sollte, erstellen Sie ein mock der Aktivität Klasse die Klasse ist, die ich Teste. Ich würde wirklich zu schätzen, Hilfe und Einblicke in diese.
- Sie sollten nicht spotten entfernt Methoden der Klasse unter test. Und du hast Recht - man sollte nicht spotten entfernt die Klasse selbst. Statt Spott ist entworfen für das ersetzen aller Mitarbeiter der Klasse unter test. Also, wenn deine Klasse, abhängig von anderen Klassen, deren Instanzen werden in Ihren Methoden, dann einfach mock-Weg diese Mitarbeiter.
- Ausnahme ist auch klar, Gesetz ist nicht ein mock-also keine wenn() auf. Einige doc, die Sie Lesen sollten, IMHO
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Sie merkte,
act
ist nicht verspotten, und daher kann man nicht aufzeichnen Verhaltens auf Sie. Könnten SieMockito.spy
, gut, spy (oder teilweise mock) dieact
Objekt, so dass Sie nur das aufnehmen, das Verhalten dersecondMethod
und führen Sie den eigentlichen code fürfirstMethod
.Beachten Sie jedoch, dass Matcher können nicht verwendet werden
doReturn
fordert, unabhängig davon, wie Siemock
ing oderspy
ing Ihr Objekt. Ein return-Wert muss ein konkretes Objekt.Etwas eleganter syntax ermöglicht die Verwendung von Annotationen anstelle von explizit aufrufen
Mockito.spy
, aber es ist eine Frage des Geschmacks wirklich:Hier sind einige Hinweise:
Hoffe, es hilft.