Maison >Java >javaDidacticiel >Comment se moquer d'une seule méthode statique et renvoyer un objet à l'aide de PowerMockito ?

Comment se moquer d'une seule méthode statique et renvoyer un objet à l'aide de PowerMockito ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-27 16:52:12596parcourir

How to Mock a Single Static Method and Return an Object Using PowerMockito?

Se moquer d'une méthode statique unique et renvoyer un objet à l'aide de PowerMockito

Dans ce scénario, vous souhaitez vous moquer d'une méthode statique, m1, de une classe contenant deux méthodes statiques, m1 et m2. L'objectif est que m1 renvoie un objet lorsqu'il est appelé.

Pour y parvenir, vous avez initialement tenté d'utiliser PowerMockito.mockStatic avec une réponse personnalisée pour définir la valeur de retour de m1. Cependant, cette approche a entraîné une erreur d'incompatibilité de type car elle a invoqué à la fois m1 et m2, qui avaient des types de retour différents.

Vous avez également essayé d'utiliser PowerMockito.when pour spécifier directement la valeur de retour de m1. Cependant, cela n'a pas pris effet lorsque m1 a été appelé par la suite.

La stratégie correcte consiste à utiliser à la fois la version à 1 argument de mockStatic pour activer la simulation statique et la syntaxe when-thenReturn pour spécifier la valeur de retour pour la méthode ciblée. Voici comment :

import static org.mockito.Mockito.*;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

class ClassWithStatics {
  public static String getString() {
    return "String";
  }

  public static int getInt() {
    return 1;
  }
}

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithStatics.class)
public class StubJustOneStatic {
  @Test
  public void test() {
    PowerMockito.mockStatic(ClassWithStatics.class);

    when(ClassWithStatics.getString()).thenReturn("Hello!");

    System.out.println("String: " + ClassWithStatics.getString());
    System.out.println("Int: " + ClassWithStatics.getInt());
  }
}

Dans cet exemple, ClassWithStatics contient deux méthodes statiques : getString et getInt. La classe de test, StubJustOneStatic, utilise PowerMockito pour activer la simulation statique pour ClassWithStatics, puis remplace la valeur de retour de getString par « Hello ! » en utilisant when-thenReturn. Le comportement par défaut de getInt est conservé, il continue donc de renvoyer 1.

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!

Déclaration:
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