如何测试jMock中未调用类的所有方法?

时间:2018-06-29 14:30:20

标签: java jmock

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

但是,如果不止3种方法(例如30种)怎么办?我将如何测试?

1 个答案:

答案 0 :(得分:0)

首先,我相信这实际上会满足您的要求:

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