【发布时间】:2012-08-23 15:51:56
【问题描述】:
我正在尝试模拟对最终方法 ResourceBundle.getString() 的调用。使用 PowerMock 1.4.12 和 EasyMock 3.1,调用不会被模拟;而是调用“真实”方法。
我的测试课:
@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”,因此模拟被正确注入。 (另外,在设置过程中,在expect() 调用中对getString() 的调用没有错误)。
使用普通模拟而不是漂亮模拟,我收到以下错误:
java.lang.AssertionError:
Unexpected method call handleGetObject("Queue"):
getString("Queue"): expected: 1, actual: 0
知道我做错了什么吗?
谢谢。
【问题讨论】: