使用jmock,我如何测试在调用另一个类中的方法时,某个类的所有方法都没有被调用?
例如,如果我有classA和classB

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

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

如何测试调用B#doNothing()不会调用类的任何方法?
我知道用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();
    }
}

但如果不止3种方法,比如说30种呢?我该怎么测试?

最佳答案

首先,我相信这会符合你的要求:

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

10-08 13:20