我試圖嘲笑最後的方法ResourceBundle.getString()
。使用PowerMock 1.4.12和EasyMock 3.1,通話不會被模擬;相反,「真正的」方法被調用。用PowerMock + EasyMock嘲笑最後的方法
我的測試類:
@RunWith(PowerMockRunner.class)
@PrepareForTest(ResourceBundle.class)
public class TestSuite {
@Before
public void setUp() throws Exception {
ResourceBundle resourceBundleMock = PowerMock.createNiceMock(ResourceBundle.class);
expect(resourceBundleMock.getString(BundleConstants.QUEUE)).andReturn("Queue");
PowerMock.replay(resourceBundleMock);
beanBeingTested.setMessages(resourceBundleMock);
}
...
}
代碼在BeanBeingTested:
private ResourceBundle messages;
...
String label = messages.getString(BundleConstants.QUEUE);
錯誤消息:
java.util.MissingResourceException: Can't find resource for bundle $java.util.ResourceBundle$$EnhancerByCGLIB$$e4a02557, key Queue
at java.util.ResourceBundle.getObject(ResourceBundle.java:384)
at java.util.ResourceBundle.getString(ResourceBundle.java:344)
at com.yoyodyne.BeanBeingTested.setUpMenus(BeanBeingTested.java:87)
當我通過測試情況下,步驟,調試器顯示的類型beanBeingTested.messages
作爲「EasyMock for class java.util.ResourceBundle」,所以模擬注入corr ectly。 (另外,在設置期間呼叫expect()
呼叫getString()
時沒有錯誤)。
如果是單純的模仿,而不是一個很好的模擬,我得到以下錯誤:
java.lang.AssertionError:
Unexpected method call handleGetObject("Queue"):
getString("Queue"): expected: 1, actual: 0
任何想法,我做錯了嗎?
謝謝。
我也面臨同樣的問題。但這仍然沒有幫助。你只是指最終方法還是靜態方法? – Siddharth
@Siddharth {{PowerMock.mockStaticNice()}}嘲笑一個類的靜態方法,但保持其餘方法不變。如果這個線程不能幫助你,你應該創建一個新的問題,因爲看起來你有不同的問題。 – Andy
感謝您的回覆@Andy。但是這個線程的主題討論了最終方法,但是你正在談論靜態方法。我錯過了什麼嗎? 我的問題是,有「公共最終空白」的方法,我試圖模擬和測試調用實際的方法,而不是模擬。上述問題與我正在談論的問題有何不同?對不起,如果我錯過了一點。 – Siddharth