0
votes

Comment tester une méthode privée dans Junit Spring Boot

J'ai besoin de tester une méthode privée. Quelle est la bonne façon de tester la méthode ci-dessous? J'ai essayé d'utiliser Mockito quand ... mais comment puis-je me moquer d'une méthode privée. Je pense que nous ne pouvons pas simuler une méthode privée.

    private classObject privateMethod(Message message){
        try{
           Objectmapper mapper = new ObjectMapper();
           return mapper.readValue(message.getBody(), ClassName.class);
        }catch(){
           throw new Exception(); 
        }
    }

    //I am getting an exception while testing

    byte[] body = {10,-11,12,14,15};
    MessageProperties msgProp = new MessageProperties();
    Message message = new Message(body, msgProp);

    // the above message is passed as parameter to function through                           
    // which private method is called
    objectxyz.execute(message);

    // execute method
    public void execute(Message message){
        objectxyz xyz = privateMethod(message);
        objectabc abc = service.someMethod(xyz);
        List<object> list = someAnotherMethod(abc, xyz);
    }

    // I tried below code in my test case and have used 
    // @Mock private ObjectMapper objectMapper;
    Mockito.when(objectMapper.readValue(body, ClassName.class)).thenReturn(classObject);


1 commentaires

Bon maintenant, je comprends le concept, mais si nous voulons tester la méthode publique, c'est-à-dire exécuter, qui comprend le retour de la méthode privée et des méthodes privées, retournez mapper.readValue (message.getBody (), ClassName.class); échoue comment pouvons-nous réussir le test de la méthode d'exécution?


4 Réponses :


2
votes

La botte de printemps n'a rien de spécial à ce sujet:

Les méthodes privées ne doivent pas être testées - c'est un "comment" interne de la classe et vous devez principalement tester l'API de la classe - les "capacités" qu'elle expose à l'utilisateur de la classe via des méthodes non privées.

/ p>

Pensez à traiter une classe comme une boîte noire (avec éventuellement des dépendances simulées de cette classe) et vérifiez sa fonctionnalité comme je l'ai expliqué.


0 commentaires

1
votes

Vous pouvez utiliser le framework manifold pour tester avec réflexion. Voir cette solution précédemment répondue: Comment tester une fonction privée ou une classe qui a des méthodes privées, des champs ou des classes internes?


0 commentaires

0
votes

Ouais, la méthode privée devrait être une méthode interne, devrait être utilisée par une autre méthode publique, donc. ne le testez pas;


0 commentaires

0
votes

Voici des approches de base pour tester des méthodes privées.

  1. Ne testez pas les méthodes privées.
  2. Accordez l'accès au package de méthodes.
  3. Utilisez une classe de test imbriquée.
  4. Utilisez la réflexion.

Article détaillé


0 commentaires