【问题标题】:JMock expectations - is it possible to check the actual value in the expectation?JMock 期望 - 是否可以检查期望中的实际值?
【发布时间】:2011-08-02 17:47:02
【问题描述】:

我是 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 是否有可能或者是否有意义?

谢谢

【问题讨论】:

  • 如果您的问题已得到解答,请选择正确的一个。如果没有,请更新您的问题。

标签: jmock hamcrest


【解决方案1】:

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

如果您确实使用了模拟,那么正如其他帖子所说,您需要使用@RunWith(JMock.class) 或 assertIsSatisfied(),或者尝试版本控制中的新模拟 junit 规则。

【讨论】:

  • 在尝试 assertIsSatisfied 后我意识到我犯了错误。这个例子很简单,但我只是想看看 JMock 能做什么。我现在意识到没有必要测试特定的返回值,因为它不是我正在测试的模拟类。
【解决方案2】:

添加

 context.assertIsSatisfied();

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

【讨论】:

  • 我添加了这个,它表明我在代码中有一些错误。我正在创建一个新的 class2 实例,即使它被模拟了。 JMock 似乎并不关心返回值,而是关心它的类型。我想使用断言来检查值是有意义的。
  • 抱歉,最后一句话我没看懂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
相关资源
最近更新 更多