2013-03-19 49 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中可以做到的最好的。

外部'{}'是一個匿名子類,內部'{}'是一個初始化塊。