3 votes

Comment tester que toutes les méthodes d'une classe ne sont pas appelées dans jMock ?

En utilisant jMock, comment puis-je tester que toutes les méthodes d'une certaine classe ne sont pas appelées lors de l'invocation d'une méthode dans une autre classe ?

Par exemple, si j'ai la classe A et la classe B :

class A {
    void x() {
    }
    void y() {
    }
    void z() {
    }
}

class B {
    A a;
    void doNothing() {
    }
}

Comment puis-je tester que l'invocation de B#doNothing() n'invoque pas tout de la classe A La méthode de l'UE ?

Je sais qu'avec jMock 2 et JUnit 3, je peux le faire :

public class BTest extends MockObjectTestCase {
    @Test
    public void testDoNothing() {
        B b = new B();
        A a = b.getA();
        checking(new Expectations() {{
            never(a).x();
            never(a).y();
            never(a).z();
        }});
        b.doNothing();
    }
}

Mais que faire s'il y a plus de 3 méthodes, disons 30 ? Comment tester cela ?

0voto

Daniel Martin Points 9148

Tout d'abord, je pense qu'il correspondra en fait à ce que vous voulez :

public class BTest extends MockObjectTestCase {
    @Test
    public void testDoNothing() {
        B b = new B();
        A a = b.getA();
        checking(new Expectations() {{
            never(a);
        }});
        b.doNothing();
    }
}

Cependant, si cela ne fonctionne pas, ceci devrait :

import org.hamcrest.Matchers;
// ...

public class BTest extends MockObjectTestCase {
    @Test
    public void testDoNothing() {
        B b = new B();
        A a = b.getA();
        checking(new Expectations() {{
            exactly(0).of(Matchers.sameInstance(a));
        }});
        b.doNothing();
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X