【发布时间】:2013-03-19 10:05:10
【问题描述】:
我是 JMock 的新手,并试图通过 Scala 进行简单的单元测试。测试是模拟一个接口,然后在模拟接口上执行一个方法之前设置一些期望值。
val context = new Mockery
val mockObj= context.mock(classOf[SomeClassInterface])
@Test def sometest = {
context.checking(
new Expectations() {
allowing (mockObj).doFunc1();
will(returnValue(someResponse);
allowing (mockObj).doFunc2(someResponse);
will(returnValue(someResponse));
allowing (mockObj).doFunc3(someResponse);
will(returnValue("Enabled"));
}
)
var status:String = mockObj.doSomething()
//context.assertIsSatisfied();
Assert.assertTrue(status.equalsIgnoreCase("Enabled"))
}
这会导致错误;
意外调用; mockObj.doSomething() ......在这之前发生了什么;什么都没有!
有什么想法吗?
【问题讨论】:
-
您的期望不允许调用
doSomething方法。它们只允许在mockObj上调用doFunc1、doFunc2和doFunc3(而你根本不调用这些方法,为什么要允许它们呢?)。 -
我认为这个想法是只对可能被称为调用 doSomething 的副产品的方法设置期望。在我的情况下,每当调用 doSomething 时,都会导致调用 doFunc1 2 & 3 方法
-
原因如何?你说
SomeClassInterface是一个接口,所以没有doSomething的实现。无论如何,即使有一个实现,创建一个模拟对象的整个想法就是不要使用它。