Voici ma hiérarchie de classesJUnit Test: l'invocation classe parente Méthode protégée
abstract Class A
{
int i = 0;
protected init (String param1, String param2)
{
//do lots of common things based on param1, param2 and save data in i
}
}
Ensuite, il y a 3-4 classes qui implémente A par exemple
Class B extends A
{
public B()
{
super();
}
public void performSomeAction()
{
init (param1_specific_to_class_B, param2_specific_to_class_B); //calling parent class method
//do rest of teh random things
}
}
Maintenant, je suis en train d'écrire un JUnit test pour la classe A. Fondamentalement, je veux tester tout ce que la méthode fait est exacte ou non. J'ai essayé
Class clas = A.class;
B b = new B();
Method A_init;
A_init = clas.getDeclaredMethod("init", String.class, String.class);
A_init.invoke(b, param1_specific_to_class_B, param2_specific_to_class_B);
Mais sa ne fonctionne pas et je reçois exception suivante
java.lang.IllegalAccessException: Class test.package.subpackage.ATest can not access a member of class package.subpackage.A with modifiers "protected"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
at java.lang.reflect.Method.invoke(Method.java:578)
at test.package.subpackage.ATest.initTest(ATest.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
Le déplacement de la classe vers ce paquet n'est pas une option puisque nous avons deux hiérarchies de paquetages différentes (les classes de projet étant dans le dossier src et le test étant dans le test foldeR). merci pour le 'setAccessible (true)'.C'est ce que je recherchais –
Comme cela arrive avec les projets Maven, vous avez un src et un dossier de test, mais différents dossiers ne signifient pas nécessairement des paquets différents. – Lucas