我是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.测试仍然通过,所以我只是想澄清一下这个例子jus期望返回类型是任何整数?是否有可能或甚至有意义检查它是否返回10?
由于
答案 0 :(得分:2)
问题是你没有将Class2的实例传递给Class1的实例,没有办法将两个对象绑定在一起。 JMock旨在测试对象如何协作,因此必须有一种方法来设置对象图。这可能是一个setter或通过构造函数。在你的情况下,如果Class2真的如此简单以至于它只返回一个值,那么使用mock就可能不值得使用实例。
如果你确实使用了mock,那么正如另一篇文章所说,你需要使用@RunWith(JMock.class)或assertIsSatisfied(),或者尝试版本控制中新的mockry junit规则。
答案 1 :(得分:1)
添加
context.assertIsSatisfied();
到测试结束。这将使JMock确认满足您定义的所有期望。