web-dev-qa-db-fra.com

Test de la méthode privée avec power mock qui renvoie la liste des entiers

J'ai une méthode privée qui prend une liste de valeur entière me renvoie une liste de valeur entière. Comment puis-je utiliser power mock pour le tester? Je suis nouveau à powermock.Puis-je faire le test avec facile maquette? Comment..

19
user882196

Depuis la documentation , dans la section intitulée "Common - Bypass encapsulation":

Utilisez Whitebox.invokeMethod (..) pour appeler une méthode privée d'une instance ou d'une classe .

Vous pouvez également trouver des exemples dans la même section.

26
JB Nizet

Voici un exemple complet comment le faire:

import Java.util.ArrayList;
import Java.util.List;

import org.junit.Assert;
import org.junit.Test;
import org.powermock.reflect.Whitebox;

class TestClass {
    private List<Integer> methodCall(int num) {
        System.out.println("Call methodCall num: " + num);
        List<Integer> result = new ArrayList<>(num);
        for (int i = 0; i < num; i++) {
            result.add(new Integer(i));
        }
        return result;
    }
}

 @Test
 public void testPrivateMethodCall() throws Exception {
     int n = 10;
     List result = Whitebox.invokeMethod(new TestClass(), "methodCall", n);
     Assert.assertEquals(n, result.size());
 }
7
Whitebox.invokeMethod(myClassToBeTestedInstance, "theMethodToTest", expectedFooValue);
1
Oded Breiner

Lorsque vous souhaitez tester une méthode privée avec Powermockito et que cette méthode privée a la syntaxe:

private int/void testmeMethod(CustomClass[] params){
....
}

dans votre méthode de classe de test:

CustomClass [] params = new CustomClass [] {...} WhiteboxImpl.invokeMethod (spy, "testmeMethod", paramètres)

ne fonctionnera pas à cause des paramètres. vous obtenez un message d'erreur indiquant que testmeMethod avec ces arguments n'existe pas Regardez ici:

Classe WhiteboxImpl

public static synchronized <T> T invokeMethod(Object tested, String methodToExecute, Object... arguments)
            throws Exception {
        return (T) doInvokeMethod(tested, null, methodToExecute, arguments);
    }

Pour les arguments de type Array, PowerMock est perturbé. Donc modifiez ceci dans votre méthode de test pour:

WhiteboxImpl.invokeMethod(spy,"testmeMethod",(Object) params)

Vous n'avez pas ce problème pour les méthodes privées sans paramètre. Si je me souviens bien, cela fonctionne pour les paramètres de type type Primitve et classe wrapper.

"Comprendre TDD, c'est comprendre le génie logiciel"

0
ugurkocak1980