【问题标题】:How to test that all methods of a class is not called in jMock?如何测试在jMock中没有调用类的所有方法?
【发布时间】:2018-12-08 18:46:43
【问题描述】:

使用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 种呢?我将如何测试它?

【问题讨论】:

  • 使用反射获取A中的所有方法,然后使用never断言
  • @RishikeshDhokare 你能证明你的意思吗?
  • Jmock 3?你从哪里得到Jmock 3? jmock.org 将最新版本列为 2.6.1
  • @DanielMartin 抱歉,我的意思是 jMock 2 和 JUnit 3。

标签: java jmock


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 2018-10-08
    • 2019-09-01
    • 1970-01-01
    相关资源
    最近更新 更多