Как проверить, что все методы класса не вызываются в jMock? - PullRequest
0 голосов
/ 29 июня 2018

Как с помощью jMock проверить, что все методы определенного класса не вызываются при вызове метода в другом классе?

Например, если у меня есть класс A и класс B:

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

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

Как проверить, что вызов B#doNothing() не вызывает любого метода класса A?

Я знаю, что с jMock 2 и JUnit 3 я могу сделать:

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();
    }
}

Но что, если существует более трех методов, скажем, 30? Как бы это проверить?

1 Ответ

0 голосов
/ 29 июня 2018

Во-первых, я считаю, что это на самом деле будет соответствовать тому, что вы хотите:

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

Однако, если это не сработает, это должно:

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();
    }
}
...