J'ai quitté Java pendant environ 2 semaines, principalement parce que je n'étais pas satisfait, mais je suis pressé pour le développement, donc je vais le tester avec JUnit! Même si vous essayez d'utiliser une méthode ou une variable de champ dont le modificateur d'accès est Private, vous ne pouvez pas l'appeler depuis d'autres classes comme une évidence (^ ω ^) ...
Mais bon, j'ai fait beaucoup de recherches et je l'ai découvert, alors je vais l'écrire. Si vous le souhaitez, essayez de le fertiliser.
environnement d'utilisation: OS:Windows 10 java ver:8 IDE:eclipse 4.6 Neon
Site externe (https://ja.osdn.net/projects/sfnet_junit-addons/releases/) Récupérez le fichier jar de junit-addons à partir de.
Enregistrez-le dans un joli répertoire local.
Démarrez eclipse, faites un clic droit sur [Package Explorer] et ajoutez un Jar externe depuis [Build Path] -> [Build Path Configuration] -> [java Build Path].
Vous êtes maintenant prêt.
http://junit-addons.sourceforge.net/junitx/util/PrivateAccessor.html
Hmmmm.
Je ne sais pas du tout.
Dites-moi Guguru Sensei!
Préparez un programme de test. Tout d'abord, du programme à tester.
Sample.java
public class Sample {
//variables de champ privé
private int x = 10;
//variables de champ privées et statiques
private static int y = 20;
//méthode privée
private String testMethod(String x){
return x;
}
//méthodes privées et statiques
private static String testStaticMethod(String y, String z){
return y + z;
}
}
Ensuite, préparez un fichier de classe pour JUnit.
SampleTest.java
import static org.junit.Assert.*;
import org.junit.Test;
import junitx.util.PrivateAccessor;
public class SampleTest {
@Test
/**
*Fonction de test pour accéder aux champs et méthodes privés
*/
public void privateGetField() throws Throwable {
Sample sample = new Sample();
try {
//Une méthode pour accéder aux variables de champ privé.
//Premier argument:Variable d'instance de la classe testée Second argument:Nom de la variable de champ à laquelle vous souhaitez accéder
int x = (int)PrivateAccessor.getField(sample, "x");
//Comparer la valeur mesurée et la valeur attendue par assertion
assertEquals(x,10);
//Les variables de champ privées et statiques sont accessibles de la même manière. Explication omise
int y = (int)PrivateAccessor.getField(sample, "y");
assertEquals(y,20);
//Une méthode pour accéder aux fonctions privées.
//Premier argument:Variable d'instance de la classe testée Second argument:Nom de la fonction de champ à laquelle vous souhaitez accéder
//Troisième argument:Tableau de type d'argument Quatrième argument:Tableau de valeurs d'argument
String method_x = (String)PrivateAccessor.invoke( sample,
"testMethod",
new Class[]{String.class},
new Object[]{"private_x"});
assertEquals(method_x,"private_x");
//Les fonctions privées et statiques sont accessibles de la même manière. Concevez les troisième et quatrième arguments en fonction du nombre de types d'arguments
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{
}
}
}
Doya!
l'a fait!
Vous pouvez également définir une valeur pour une variable de champ privé.
SampleTest.java
//Omis en chemin
@Test
/**
*Une fonction qui définit une valeur dans une variable de champ privé
*/
public void privateSetField(){
Sample sample = new Sample();
try {
//Premier argument: variable d'instance de la classe testée Deuxième argument: nom de la variable
//Troisième argument:Valeur que vous souhaitez définir
PrivateAccessor.setField(sample, "x", 100);
//Vérifiez s'il a été défini!
int get_x = (int)PrivateAccessor.getField(sample, "x");
assertEquals(get_x,100);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}finally{
}
}
La fin
Recommended Posts