PowerMock, simulez une méthode statique, ALORS appelez des méthodes réelles sur toutes les autres statiques

Je suis en train de me moquer des méthodes statiques d’une classe. Je dois le faire dans une méthode de configuration JUnit @Before.

Mon but est de configurer la classe pour qu’elle appelle des méthodes réelles, sauf pour les méthodes que je moque explicitement.

Fondamentalement:

 @Before public void setupStaticUtil() { PowerMockito.mockStatic(StaticUtilClass.class); when(StaticUtilClass.someStaticMethod(antSsortingng())).thenReturn(5); // mock out certain methods... // Now have all OTHER methods call the real implmentation??? How do I do this? } 

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

Je ne peux donc pas simplement choisir la méthode évidente consistant à appeler des méthodes réelles comme réponse par défaut, comme indiqué 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(antSsortingng())).thenReturn(5); } 

Je dois définir la réponse par défaut pour appeler des méthodes réelles sur toutes les autres méthodes statiques après que je me moque des résultats de la méthode que je suis intéressé à me moquer.

Est-ce possible?

Ce que vous cherchez est appelé moqueur partiel .

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

Dans PowerMockito, vous pouvez utiliser le raccourci, qui ne tronquera que la méthode définie et laissera les autres inchangés:

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

aussi n’oubliez pas le

 @PrepareForTest(StaticUtilClass.class)