web-dev-qa-db-fra.com

Comment se moquer d'une méthode statique vide pour lever une exception avec Powermock?

J'essaie d'utiliser Powermock et Mockito pour se moquer d'une méthode statique vide pour lever l'exception comme ci-dessous. Mais j'ai rencontré un problème. À moins que je fasse les deux invocations d'Adder.add () avec le même argument, le IOException moqué ne sera pas jeté.

BTW, j'ai ajouté @RunWith(PowerMockRunner.class) et @PrepareForTest(Adder.class) à la classe de test unitaire.

class Adder{
    public static void add(int i) throws IOException{
        return;
    }
}

@Test
public void testAdder() throws IOException{
    PowerMockito.mockStatic(Adder.class);
    PowerMockito.doThrow(new IOException()).when(Adder.class);
    Adder.add(12);
    try {
        Adder.add(11);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // assert things 
}

Merci d'avance. :)

La réponse est comme ci-dessous.

Après avoir consulté ici http://code.google.com/p/powermock/issues/detail?id=278 , en fait Adder.add (12) ci-dessus fait partie de la configuration de la méthode statique factice. Cela signifie qu'en invoquant Adder.add () avec l'argument 12, IOException sera levée. C'est difficile à comprendre, non? :) Il doit donc être écrit comme ci-dessous.

PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(anyInt());
28
Smartmarkey

La réponse est comme ci-dessous.

Après avoir consulté ici http://code.google.com/p/powermock/issues/detail?id=278 , en fait Adder.add (12) ci-dessus fait partie de la configuration de la méthode statique factice. Cela signifie qu'en invoquant Adder.add () avec l'argument 12, IOException sera levée. C'est difficile à comprendre, non? :) Il doit donc être écrit comme ci-dessous.

PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(anyInt());

ÉDITER:
Le lien est mort, essayez Internet Archive un à la place.

27
Smartmarkey

Ou

PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class, "add", Mathers.eq(12));
4
kk1957

Avez-vous oublié de mettre PowerMock en mode relecture?

Comment se moquer des méthodes statiques.

Par votre lien ...

Comment vérifier le comportement La vérification d'une méthode statique se fait en deux étapes. Appelez d'abord PowerMockito.verifyStatic() pour commencer à vérifier le comportement et appelez la méthode statique que vous souhaitez vérifier. Par exemple.

 PowerMockito.verifyStatic();
 Static.firstStaticMethod(param);

Important: Vous devez appeler verifyStatic() par vérification de méthode.

0
John B