2013-03-19 27 views
0

我是JMock的新手,试图通过Scala进行简单的单元测试。测试是模拟一个接口,然后在模拟接口上执行一个方法之前设置一些xpectations。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().........在这之前发生了什么;没有!

任何想法出了什么问题?

+0

您的期望不允许调用doSomething方法。它们只允许在'mockObj'上调用'doFunc1','doFunc2'和'doFunc3'(并且根本不调用这些方法,为什么要允许它们?)。 – 2013-03-19 14:57:01

+0

我认为这个想法只是设定可能被称为doSomething的副产品的方法的期望。在我的情况下,只要发生doSomething的调用,就会导致doFunc1 2&3方法被调用 – cduggan 2013-03-19 15:26:50

+1

原因如何?你说'SomeClassInterface'是一个接口,所以没有'doSomething'的实现。无论如何,即使有一个实现,创建一个模拟对象的整个想法是不使用它。 – 2013-03-19 20:24:09

回答

0

不确定斯卡拉,但你错过了双'{{''}}'语法?我们对此非常抱歉,但这是我们在Java中可以做到的最好的。

外部'{}'是一个匿名子类,内部'{}'是一个初始化块。