Maison > Java > javaDidacticiel > Comment se moquer des méthodes privées en Java avec PowerMock ?

Comment se moquer des méthodes privées en Java avec PowerMock ?

Susan Sarandon
Libérer: 2024-11-04 08:14:01
original
520 Les gens l'ont consulté

How to Mock Private Methods in Java with PowerMock?

Test de méthodes privées avec PowerMock

Lors du développement de logiciels, il est inévitable de rencontrer des situations dans lesquelles vous devez tester des méthodes publiques qui s'appuient sur des méthodes privées. ceux. Dans de tels cas, supposer que les méthodes privées fonctionnent correctement peut simplifier le processus de test. PowerMock est un framework de test Java qui fournit des mécanismes pour simuler des méthodes privées à des fins de test.

Se moquer des méthodes privées à l'aide de PowerMock

Pour simuler une méthode privée à l'aide de PowerMock, suivez ces étapes :

  1. Espionner la classe : Créez une instance d'espionnage de la classe contenant la méthode privée dont vous souhaitez vous moquer. Ceci peut être réalisé en utilisant la méthode PowerMockito.spy().
  2. Spécifiez le comportement attendu de la méthode : Utilisez la méthode when() pour définir le comportement attendu de la méthode privée. Cela inclut la spécification des arguments et de la valeur de retour. Utilisez des correspondants de méthodes, tels que anyString() et anyInt(), pour gérer différentes valeurs.
  3. Exécutez le test : Invoquez la méthode publique qui appelle la méthode privée et affirmez le comportement attendu.

Exemple :

Considérez la classe suivante avec une méthode publique (meaningfulPublicApi()) qui invoque 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

Le test JUnit correspondant utilisant PowerMock ressemblerait à :

<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() throws Exception {
        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 cet exemple :

  • L'annotation @PrepareForTest marque la classe CodeWithPrivateMethod pour la préparation, permettant PowerMock pour modifier sa méthode privée.
  • La méthode when() définit la valeur de retour attendue de la méthode doTheGamble() pour tous les arguments d'entrée.
  • Le test vérifie qu'une exception est levée lorsque le La méthode publique est exécutée.

Cet exemple simple montre comment simuler des méthodes privées pour tester à l'aide de PowerMock. En tirant parti de cette technique, vous pouvez isoler et tester efficacement la logique de vos méthodes publiques, garantissant ainsi la fiabilité de votre logiciel.

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