0

我是 Java 和 JMock 的新手,我目前正试图让我的头脑围绕着嘲笑。我用虚拟类创建了这个虚拟测试:

public class JmockUnitTest {
    private Mockery context = new Mockery();

    private Class2 class2 = context.mock(Class2.class);

    @Test
    public void testMethod() {

        Class1 class1 = new Class1();

        context.checking(new Expectations() {{
            oneOf(class2).method2();
            will(returnValue(1234));
        }});

        class1.method1();
    }


public class Class1 {

    public void method1() {
        Class2 class2 = new Class2Impl();
        Integer time = class2.method2();
    }
}

public interface Class2 {
    public Integer method2();
}

public class Class2Impl implements Class2 {
    public Integer method2() {
        return 10;
    }
}

}

我的 Class2Impl.method2() 返回整数 10,但期望值设置为 1234。测试仍然通过,所以我只是想澄清这个示例是否期望返回类型是任何整数?检查它是否返回 10 是否有可能或者是否有意义?

谢谢

4

2 回答 2

2

问题是您没有将 Class2 的实例传递给 Class1 的实例,无法将两个对象绑定在一起。JMock 旨在测试对象如何协作,因此必须有一种方法来设置对象图。这可能是一个 setter 或通过构造函数。在您的情况下,如果 Class2 真的如此简单以至于它只返回一个值,那么使用模拟但使用真实实例可能不值得。

如果您确实使用了模拟,那么正如另一篇文章所说,您需要使用@RunWith(JMock.class) 或 assertIsSatisfied(),或者尝试版本控制中的新嘲笑 junit 规则。

于 2011-08-03T11:04:22.970 回答
1

添加

 context.assertIsSatisfied();

到你的测试结束。这将使 JMock 确认您定义的所有期望都得到了满足。

于 2011-08-02T19:46:47.433 回答