2017-02-28 117 views
-1

我要檢查它是否使用了EasyMock的andReturn方法具有相同的值返回測試靜態函數。不幸的是,我遇到與"java.lang.IllegalStateException:失蹤行爲定義爲前面的方法調用:」當我使用了EasyMock我想這是不可能通過EasyMock的測試,當我試圖想到方法,你會明白問題的代碼更好是否有可能通過EasyMock的

問候 的Alper

Menu menu = EasyMock.createMock(Menu.class) 
menu.setName("name"); 
     EasyMock.expect(XmlParseUtility.createLinesToParse(menu).toString()).andReturn(angularLines.toString()); 

錯誤消息:

java.lang.IllegalStateException: missing behavior definition for the preceding  method call: 
    Menu.getName() 
    Usage is: expect(a.foo()).andXXX() 
+0

這不是錯誤是什麼。 EasyMock遇到了一個你沒有告訴它的方法調用。由於它是如何工作的,它會在發生這種情況時產生異常。有兩種解決方案:1.告訴圖書館它應該期望被調用的每種方法。 2.切換到允許意外方法調用的模擬庫。 –

+0

如果你的意思是 「EasyMock.expect(menu.getName())等於(」 名稱 「);」,我已經做到了。切換到嘲笑圖書館普羅霍羅夫,你是什麼意思?你可以給我一個例子嗎 ? – user2307786

+0

我的意思是不同的嘲笑庫是全部。例如,Mockito或Spock。 EasyMock是一個「嚴格」的嘲笑庫,它會讓你提供所有可能的方法被模擬調用。這可能會用你無意測試的有效無意義的東西來稀釋你的測試(儘管實際效果會逐個改變,有時候你想要這樣嚴格)。 Mockito是一個「寬鬆」的嘲諷庫,它會忽略意想不到的方法調用。 –

回答

0

我不知道你想要做什麼評論T的一個。他評論道,EasyMock並不嚴格。這是你想要的。

如果你想有一個風格的Mockito模擬,您將使用niceMock

然後,你的代碼。我覺得你想記錄一個電話setName。然後要確保XmlParseUtility.createLinesToParse按預期工作。如果我是正確的,你想這個代碼:

Menu menu = EasyMock.createNiceMock(Menu.class); // unrecorded methods will return null 
menu.setName("name"); // recording a call to setName 
replay(menu); // done with recording, going in replaying 
assertEquals(angularLines.toString(), XmlParseUtility.createLinesToParse(menu).toString()); 
verify(menu); // if you want to make sure setName was called 
0

如果您實際上是試圖存根靜態XmlParseUtility.createLinesToParse()方法調用,那麼PowerMock庫是你在找什麼。

// instantiate angularLines and menu 

PowerMock.mockStatic(XmlParseUtility.class); 
EasyMock.expect(XmlParseUtility.createLinesToParse(menu)).andReturn(angularLines); 
PowerMock.replay(XmlParseUtility.class); 

// invoke test subject 

PowerMock.verify(XmlParseUtility.class); 

PowerMock還要求使用他們的跑步者運行測試,並且包含靜態方法的類需要「準備好」。欲瞭解更多信息,檢查他們的documentation

相關問題