web-dev-qa-db-fra.com

PowerMock, simuler une méthode statique, puis appeler des méthodes réelles sur toutes les autres statiques

Je mets en place les méthodes statiques d'une classe. Je dois le faire dans une méthode de configuration JUnit annotée @Before.

Mon objectif est de configurer la classe pour appeler des méthodes réelles, sauf pour ces méthodes que je moque explicitement.

Fondamentalement:

@Before
public void setupStaticUtil() {
  PowerMockito.mockStatic(StaticUtilClass.class);

  // mock out certain methods...
  when(StaticUtilClass.someStaticMethod(anyString())).thenReturn(5); 

  // Now have all OTHER methods call the real implementation???  How do I do this?
}

Le problème que je rencontre est que dans StaticUtilClass la méthode public static int someStaticMethod(String s) jette malheureusement un RuntimeException si elle est fournie avec une valeur null.

Je ne peux donc pas simplement suivre la voie évidente d'appeler des méthodes réelles comme réponse par défaut comme ci-dessous:

@Before
public void setupStaticUtil() {
  PowerMockito.mockStatic(StaticUtilClass.class, CALLS_REAL_METHODS); // Default to calling real static methods

  // The below call to someStaticMethod() will throw a RuntimeException, as the arg is null!
  // Even though I don't actually want to call the method, I just want to setup a mock result
  when(StaticUtilClass.someStaticMethod(antString())).thenReturn(5); 
}

J'ai besoin de définir la réponse par défaut pour appeler des méthodes réelles sur toutes les autres méthodes statiques après Je me moque des résultats de la méthode qui m'intéresse.

Est-ce possible?

34
Tom Tresansky

Ce que vous cherchez s'appelle moquerie partielle.

Dans PowerMock, vous pouvez utiliser la méthode mockStaticPartial.

Dans PowerMockito, vous pouvez utiliser le stubbing, qui ne stubera que la méthode définie et laissera les autres inchangées:

PowerMockito.stub(PowerMockito.method(StaticUtilClass.class, "someStaticMethod")).toReturn(5);

n'oubliez pas non plus la

@PrepareForTest(StaticUtilClass.class)
57
zibi