web-dev-qa-db-fra.com

Vérifier l'appel de méthode statique à l'aide de PowerMockito 1.6

J'écris le cas de test JUnit pour des méthodes similaires à l'exemple ci-dessous:

Class SampleA{
    public static void methodA(){
        boolean isSuccessful = methodB();
        if(isSuccessful){
            SampleB.methodC();
        }
    }

    public static boolean methodB(){
        //some logic
        return true;
    }
}

Class SampleB{
    public static void methodC(){
        return;
    }
}

J'ai écrit le cas de test suivant dans ma classe de test:

@Test
public void testMethodA_1(){
    PowerMockito.mockStatic(SampleA.class,SampleB.class);

    PowerMockito.when(SampleA.methodB()).thenReturn(true);
    PowerMockito.doNothing().when(SampleB.class,"methodC");

    PowerMockito.doCallRealMethod().when(SampleA.class,"methodA");
    SampleA.methodA();
}

Maintenant, je veux vérifier si la méthode statique C () de la classe Sample B est appelée ou non. Comment puis-je réaliser en utilisant PowerMockito 1.6? J'ai essayé beaucoup de choses mais ça ne semble pas marcher pour moi. Toute aide est appréciée.

11
Prerak Tiwari

Personnellement, je dois dire que PowerMock, etc. est la solution à un problème que vous ne devriez pas avoir si votre code n'est pas mauvais. Dans certains cas, cela est nécessaire car les frameworks, etc. utilisent des méthodes statiques qui conduisent à du code qui ne peut tout simplement pas être testé autrement, mais s'il s'agit de VOTRE code, vous devriez toujours préférer le refactoring au lieu de la simulation statique.

Quoi qu'il en soit, vérifier que dans PowerMockito ne devrait pas être si difficile ...

PowerMockito.verifyStatic( Mockito.times(1)); // Verify that the following mock method was called exactly 1 time
SampleB.methodC();

(Bien sûr, pour que cela fonctionne, vous devez ajouter SampleB au @PrepareForTest annotation et appelez mockStatic pour cela.)

32
Florian Schaetz