Essais de méthode protégée avec JUnit
Je suis en train de tester une méthode qui est protected
. Dans mon cas de test, j'ai utilisé Reflection
pour accéder à la méthode, mais je ne suis pas exactement sûr de savoir si je suis en train de faire dans un droit chemin.
Méthode à tester:
protected void checkORCondition( Map<String, Message> messagesMap ) throws EISClientException
{
Message message = containsAMessageCode(getMessageCodes(), messagesMap);
if(message!=null)
{
throw new EISClientException("One of the specified message code matched returned errors." +
message.getMessageCode() + ": " + message.getMessageType() + ": " + message.getMessageText());
}
}
Cas de test JUnit:
@Test
public void testcheckORCondition() throws Exception {
Class clazz = MessageToExceptionPostProcessFilter.class;
Object object = clazz.newInstance();
Method method = clazz.getDeclaredMethod("checkORCondition", new Class[]{Map.class});
method.setAccessible(true);
String string = new String();
string = "testing";
Message message = new Message();
message.setMessageCode("200");
Map<String, Message> map = new HashMap<String, Message>();
map.put(string, message);
assertEquals("testing", string);
assertEquals("200", message.getMessageCode());
}
Mon JUnit passe, mais vous ne savez pas si il va à l'intérieur de la méthode.
- Avez-vous d'autres méthodes dans la même classe que l'appel de la méthode protégée? Il est acceptable, il suffit de tester les méthodes publiques dans une classe, puisque celles-ci doivent définir le comportement de l'objet.
Vous devez vous connecter pour publier un commentaire.
Meilleur moyen est de mettre le protégé méthodes sous le même nom de package en cours de test. Cela permettra d'assurer qu'ils sont accessibles. Vérifier junit page de FAQ http://junit.org/faq.html#organize_1
L'aide de la réflexion à l'accès protégé à des méthodes à partir d'une unité de test semble la main lourde. Il y a plusieurs façons plus faciles de le faire.
La façon la plus simple serait de faire en sorte que vos tests sont dans le même package hiérarchie de la classe à tester. Si ce n'est pas possible, alors vous pouvez sous-classe de la classe d'origine et de créer un accesseur public qui appelle la méthode protégée.
Si c'est un cas isolé, alors il pourrait même être aussi simple que de faire une classe anonyme.
Classe que vous souhaitez tester:
Et votre classe de test:
Il ne veut pas aller à l'intérieur de la méthode que vous ne l'appelez pas. Utilisation
invoke
l'appeler:Autre que cela, il n'y a pas de bonne solution. Une recommandation est de mettre à l'essai dans le même paquet et de le rendre paquet visible, mais il y a beaucoup d'inconvénients, comme la méthode ne sera pas visible par les classes héritées.
Je crois que la voie choisie est la bonne.
Utiliser un moqueur de la bibliothèque pour créer une sous-classe dans le cadre de votre essai.