Maison > Java > javaDidacticiel > Comment puis-je me moquer des méthodes privées pour tester à l'aide de PowerMock ?

Comment puis-je me moquer des méthodes privées pour tester à l'aide de PowerMock ?

Linda Hamilton
Libérer: 2024-11-03 15:06:30
original
243 Les gens l'ont consulté

How do I Mock Private Methods for Testing Using PowerMock?

Se moquer des méthodes privées pour les tests avec PowerMock

Lorsque vous testez des classes avec des méthodes privées, il est souvent nécessaire de se moquer de ces méthodes pour garantir que le public L'API fonctionne comme prévu. Cependant, cela peut être difficile lorsque vous utilisez des frameworks comme Mockito.

Problème :

Vous avez peut-être rencontré des problèmes en essayant de vous moquer de méthodes privées à l'aide de PowerMock, en particulier lorsque vous souhaitez manipuler la valeur de retour de la méthode privée.

Solution :

Suivez ces étapes pour simuler les méthodes privées pour les tests à l'aide de PowerMock :

  1. Importez les API PowerMock :Incluez les annotations et les API PowerMock nécessaires dans votre classe de test.

    <code class="java">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;</code>
    Copier après la connexion
  2. Préparez la classe pour les tests : Annotez votre classe de test avec @PrepareForTest et spécifiez la classe contenant la méthode privée que vous souhaitez moquer.

    <code class="java">@PrepareForTest(CodeWithPrivateMethod.class)</code>
    Copier après la connexion
  3. Créer une instance d'espion : Utilisation de PowerMockito , créez une instance d'espionnage de la classe contenant la méthode privée.

    <code class="java">CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod());</code>
    Copier après la connexion
  4. Mock Private Method : Utilisez la méthode when de PowerMockito pour vous moquer de la méthode privée. Spécifiez la classe, le nom de la méthode, les types de paramètres et la valeur de retour souhaitée.

    <code class="java">when(spy, method(CodeWithPrivateMethod.class, "doTheGamble", String.class, int.class))
     .withArguments(anyString(), anyInt())
     .thenReturn(true);</code>
    Copier après la connexion
  5. Test de la méthode publique : Appelez la méthode publique qui appelle la méthode privée et vérifiez son comportement en fonction de la valeur de retour simulée.

    <code class="java">spy.meaningfulPublicApi();</code>
    Copier après la connexion

Exemple :

Considérez la classe suivante CodeWithPrivateMethod avec 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

Pour vous moquer de doTheGamble et toujours renvoyer vrai, vous écririez le test suivant :

<code class="java">@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

De cette façon, vous pouvez vous moquer efficacement des méthodes privées de test, en vous assurant que votre public L'API fonctionne correctement même lorsque l'implémentation de la méthode privée reste inchangée.

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