So überprüfen Sie den Rückgabewert beim Aufruf einer verspottet Objekt Methode

Mit Mockito, gibt es eine Möglichkeit, Spion() auf einem Objekt und stellen Sie sicher, dass ein Objekt aufgerufen wird, eine bestimmte Anzahl von Zeiten mit den angegebenen arugments UND dass gibt es einen zu erwartenden Wert für diese Anrufe?

Ich würde gerne etwas wie die folgende:

class HatesTwos {
  boolean hates(int val) {
    return val == 2;
  }
}

HatesTwos hater = spy(new HatesTwos());
hater.hates(1);
assertFalse(verify(hater, times(1)).hates(1));

reset(hater);
hater.hates(2);
assertTrue(verify(hater, times(1)).hates(2));
  • Es klingt wie Sie versuchen zu testen, zwei Klassen auf einmal. Testen Sie die Klasse, die Sie ausspioniert, weil Sie testen wollen, es gibt den erwarteten Wert. Testen Sie die Klasse, RUFT die eine, die Sie ausspioniert, weil Sie wollen, um zu testen, welche Argumente übergeben werden. Das scheint wie zwei unterschiedliche Prüfungen auf mich zu, und ich würde dringend davon abgeraten, die versuchen, Rollen Sie in eine.
  • Aber was ist, wenn ich habe eine Klasse, die die Aufrufe Ihrer eigenen Methoden (was ist vernünftig Verhalten)? Dann testen Sie das "MyClass".funcThatGetsCalledByAnotherMyClassfunc() liefert einen bestimmten Wert, und dass es aufgerufen wird, eine bestimmte Höhe der Zeit sind beide gültig.
  • Sind Sie wirklich beide gültig? Konzentrieren sich auf Tests, die das Verhalten Ihrer Klasse richtig ist, nicht, dass seine Umsetzung ist das, was Sie glauben es zu sein. Wenn Sie die test-Methode Ein, sollten Sie sich wirklich nur über die Ausgabe der Methode A nicht, ob es ruft die Methode B und welche Argumente es geht. Wenn Sie möchten, um zu testen, Methode B, als auch, natürlich, können Sie.
  • Ich sehe nicht, warum zu wollen, vergewissern Sie sich, dass der output und das Verhalten einer Methode nicht sinnvoll. So oder so, haben Sie Einblick in meinem ursprünglichen Beitrag?
  • 3 Jahre sind vergangen: Sie haben wahrscheinlich eine Test-guru von heute. Sie haben keine Einsicht in die obigen Kommentare nun? Als Test-newb ich finde die Idee, dass "wir nur zum testen der funktionalen Schnittstelle" unbefriedigend: ich denke, dass wir vielleicht geneigt sein, zu verwenden, so etwas wie einen "Test interface", das eine Obermenge von "funktionale Oberfläche", und so nennen könnte, seine eigenen Methoden...
  • Im Allgemeinen, ich Stimme mit David. In den meisten Fällen, die Sie kümmern sollte, das Verhalten der Schnittstelle und nicht die Implementierung. Ich kann mich nicht erinnern, die details von dem, was ich versuche zu tun, als ich gepostet diese Frage. Gibt es Ausnahmen zu fast jeder Regel, obwohl, so verwenden Ihr Urteil.

InformationsquelleAutor Chris Morris | 2013-09-20
Schreibe einen Kommentar