Maison > Java > javaDidacticiel > le corps du texte

Comment se moquer des méthodes privées de test avec PowerMock et Mockito ?

Patricia Arquette
Libérer: 2024-11-04 04:21:29
original
1045 Les gens l'ont consulté

How to Mock Private Methods for Testing with PowerMock and Mockito?

Se moquer des méthodes privées pour tester avec PowerMock

Tester des classes avec des méthodes privées peut être difficile, en particulier lorsque l'on essaie d'assumer le comportement correct de ces méthodes . PowerMock propose une solution pour cela, mais pour certains utilisateurs, elle peut ne pas fonctionner comme prévu. Ici, nous allons explorer une approche possible utilisant une combinaison de Mockito et PowerMock pour réussir à simuler les méthodes privées.

Approche :

Le principal outil que nous utiliserons est Méthode when de Mockito pour spécifier le comportement de la méthode privée. Pour accéder à la méthode privée, nous utiliserons la fonction Spy de PowerMock. Cela nous permet de créer un objet espion qui intercepte les appels à la méthode privée et nous permet de nous moquer de son comportement.

Exemple :

Considérons la classe suivante, CodeWithPrivateMethod, qui a une méthode privée doTheGamble.

<code class="java">public class CodeWithPrivateMethod {

    public void meaningfulPublicApi() {
        if (doTheGamble("Whatever", 1 << 3)) {
            throw new RuntimeException("boom");
        }
    }

    private boolean doTheGamble(String whatever, int binary) {
        Random random = new Random(System.nanoTime());
        boolean gamble = random.nextBoolean();
        return gamble;
    }
}</code>
Copier après la connexion

Test :

En utilisant l'approche décrite, nous pouvons écrire un test JUnit qui se moque de la méthode privée et affirme la méthode souhaitée comportement.

<code class="java">import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.powermock.api.mockito.PowerMockito.when;
import static org.powermock.api.support.membermodification.MemberMatcher.method;

@RunWith(PowerMockRunner.class)
@PrepareForTest(CodeWithPrivateMethod.class)
public class CodeWithPrivateMethodTest {

    @Test(expected = RuntimeException.class)
    public void when_gambling_is_true_then_always_explode() {
        CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod());

        when(spy, method(CodeWithPrivateMethod.class, "doTheGamble", String.class, int.class))
                .withArguments(anyString(), anyInt())
                .thenReturn(true);

        spy.meaningfulPublicApi();
    }
}</code>
Copier après la connexion

Dans ce test, nous créons un objet espion et nous moquons de la méthode doTheGamble en utilisant when. Nous spécifions que pour toute entrée, la méthode doit toujours renvoyer true. Par conséquent, lorsque la méthode MeaningPublicApi est appelée, le test s'attend à ce que le code lève une RuntimeException en raison du comportement simulé de la méthode privée.

Cette approche combine la puissance de Mockito pour se moquer et de PowerMock pour accéder à des méthodes privées. méthodes, fournissant une solution complète pour tester le code qui repose sur des méthodes privées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal