Ich habe Java für ungefähr 2 Wochen verlassen, hauptsächlich weil ich damit nicht zufrieden war, aber ich habe es eilig mit der Entwicklung, also werde ich es mit JUnit testen! Selbst wenn Sie versuchen, eine Methode oder Feldvariable zu verwenden, deren Zugriffsmodifikator Private ist, können Sie sie nicht selbstverständlich aus anderen Klassen aufrufen (^ ω ^) ...
Aber nun, ich habe viel recherchiert und herausgefunden, also werde ich es aufschreiben. Wenn Sie möchten, versuchen Sie es zu düngen.
Nutzungsumgebung: OS:Windows 10 java ver:8 IDE:eclipse 4.6 Neon
Externe Site (https://ja.osdn.net/projects/sfnet_junit-addons/releases/) Holen Sie sich die JAR-Datei von Junit-Addons von.
Speichern Sie es in einem schönen lokalen Verzeichnis.
Starten Sie Eclipse, klicken Sie mit der rechten Maustaste auf [Paket-Explorer] und fügen Sie ein externes Jar über [Build-Pfad] -> [Build-Pfad-Konfiguration] -> [Java-Build-Pfad] hinzu.
Jetzt bist du bereit.
http://junit-addons.sourceforge.net/junitx/util/PrivateAccessor.html
Hmmmm.
Ich weiß es überhaupt nicht.
Sag mir Guguru Sensei!
Bereiten Sie ein Testprogramm vor. Zunächst aus dem zu testenden Programm.
Sample.java
public class Sample {
//private Feldvariablen
private int x = 10;
//private und statische Feldvariablen
private static int y = 20;
//private Methode
private String testMethod(String x){
return x;
}
//private und statische Methoden
private static String testStaticMethod(String y, String z){
return y + z;
}
}
Bereiten Sie als Nächstes eine Klassendatei für JUnit vor.
SampleTest.java
import static org.junit.Assert.*;
import org.junit.Test;
import junitx.util.PrivateAccessor;
public class SampleTest {
@Test
/**
*Testfunktion für den Zugriff auf private Felder und Methoden
*/
public void privateGetField() throws Throwable {
Sample sample = new Sample();
try {
//Eine Methode für den Zugriff auf private Feldvariablen.
//Erstes Argument:Instanzvariable der zu testenden Klasse Zweites Argument:Name der Feldvariablen, auf die Sie zugreifen möchten
int x = (int)PrivateAccessor.getField(sample, "x");
//Vergleichen Sie den gemessenen Wert und den erwarteten Wert durch Behauptung
assertEquals(x,10);
//Auf private und statische Feldvariablen kann auf ähnliche Weise zugegriffen werden. Erklärung weggelassen
int y = (int)PrivateAccessor.getField(sample, "y");
assertEquals(y,20);
//Eine Methode für den Zugriff auf private Funktionen.
//Erstes Argument:Instanzvariable der zu testenden Klasse Zweites Argument:Feld Funktionsname, auf den Sie zugreifen möchten
//Drittes Argument:Argumenttyp Array Viertes Argument:Array von Argumentwerten
String method_x = (String)PrivateAccessor.invoke( sample,
"testMethod",
new Class[]{String.class},
new Object[]{"private_x"});
assertEquals(method_x,"private_x");
//Auf private und statische Funktionen kann auf die gleiche Weise zugegriffen werden. Entwickeln Sie das dritte und vierte Argument entsprechend der Anzahl der Argumenttypen
String method_y = (String)PrivateAccessor.invoke( sample,
"testStaticMethod",
new Class[]{String.class,String.class},
new Object[]{"private_","static_y"});
assertEquals(method_y,"private_static_y");
} catch (NoSuchFieldException e) {
e.printStackTrace();
}finally{
}
}
}
Tust du!
erledigt!
Sie können auch einen Wert für eine private Feldvariable festlegen.
SampleTest.java
//Unterwegs weggelassen
@Test
/**
*Eine Funktion, die einen Wert in einer privaten Feldvariablen festlegt
*/
public void privateSetField(){
Sample sample = new Sample();
try {
//Erstes Argument: Instanzvariable der zu testenden Klasse Zweites Argument: Name der Variablen
//Drittes Argument:Wert, den Sie festlegen möchten
PrivateAccessor.setField(sample, "x", 100);
//Überprüfen Sie, ob es eingestellt wurde!
int get_x = (int)PrivateAccessor.getField(sample, "x");
assertEquals(get_x,100);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}finally{
}
}
Das Ende
Recommended Posts