Guave @VisibleForTesting : mir Hilft ein vollständiges Beispiel
Meine Absicht ist zu tun unit-Tests für private Methoden und ich verstehe, wie Sie zum importieren der @VisibleForTesting
und verwenden Sie es für eine private-Methode. Ich habe schon einiges in der Suche aber nicht in der Lage, um zu sehen, ein vollständiges Beispiel veranschaulicht diese Funktion.
ZB:
class MyClass {
@VisibleForTesting
private double[] getWorkArray(double[] values,int length) {
:
:
return <some double array>
}
}
Nun in JUnit, ich muss in der Lage sein zu tun
@Test
public void testProvateMethod() {
MyClass object = new MyClass();
assertNotNull(object.getWorkArray(...);
}
Aber der schwierige Teil ist, ich bin nicht in der Lage ist, zu begreifen,/die folgenden
a) Ausschnitt des maven-compiler-plugin für einschließlich der zugehörigen annotation-Prozessor
b) Tatsächlich in der Lage sein zu testen, die eine private Methode. (da wirft er Fehler mit Bezug auf die Sichtbarkeit der Methode)
Ich bin nicht in der Lage, es zu tun, in Aktion, während ich Schreibe ein test in JUnit (aufgrund der privaten access-Fehler). Für zB: mvn clean test
Geben Sie bitte ein komplettes Beispiel, um wirklich alle Schritte, die daran beteiligt sind, die JUnit testen von privaten Methoden durchgeführt.
Das problem hier ist 2 Fach.
Das problem hier ist, über eine einfache Transformation von array gegeben begin-und end-index-was ist es Wert seine eigene Methode, die ich dachte, als inlining diese Linien an jedem Ort muss ich in den code. Auch Ein weiterer Punkt im Zusammenhang : lassen Sie uns sagen, wenn ich diese extrahieren Verwandte Methoden, um eine private static geschachtelte Klasse; wie würde ich mich über Tests der Methoden einer privaten statischen Klasse.
InformationsquelleAutor user3709525 | 2014-06-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens, ich nicht empfehlen zu testen privater Methoden, unit-tests getestet werden sollte öffentliche Methoden in den meisten Fällen. Wenn Sie haben, um zu testen privater Methoden, gibt es in der Regel ein schlechtes design.
Bezüglich
@VisibleForTesting
wird es in der Paket-Methoden in Guave und nicht Teil des JUnit-API. Die annotation ist nur ein tag, um die Methode anzugeben getestet werden kann, wird es auch nicht geladen werden in der JVM. Also, wenn Sie brauchen, um zu testen nicht-öffentlicher Methoden, machen die Methoden paketbereich sichtbar unit-test-Klassen in gleichem Paket.Letzten, durch die Verwendung von spiegeln kann der Zugriff auf private Methoden, wenn Sie wirklich haben, um Sie zu testen.
Ja, @VisibleForTesting Informationen werden nur gespeichert, in der Klasse Datei aber nicht geladen in der JVM.
Ich denke, man sollte eine compile-Zeit-hook (z.B. Quelle-generation) fehl, wenn Sie kompiliert werden, ohne eine bestimmte Flagge.
InformationsquelleAutor 卢声远 Shengyuan Lu
Tests eine private Methode muss man die schlechten Muster.
Es gibt jedoch Zeiten, wenn Sie oft das Gefühl, den Drang zu testen privater Methoden.
In diesem Fall, ich persönlich benutze ReflectionTestUtils die Methode zu testen. Das ist, weil wir wollten, dass die ursprüngliche Absicht der privaten Methode, und nur zum testen der Methode. Unten ist ein Beispiel für mein Beispiel.
Ein Nachteil ist die Tatsache, dass ich den Namen der Methode als String und es ist durchaus ein bisschen traurig, außer der Tatsache, dass refactoring nicht korrekt konvertiert IDEE.
Ich hoffe, es hilft.
Dank.
InformationsquelleAutor Dark
Können Sie entfernen
private
Stichwort:Dann sind Sie in der Lage:
in Ihrem test.
InformationsquelleAutor coderz