final メソッドの呼び出しをモックしようとしています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
「クラス java.util.ResourceBundle の EasyMock」のタイプを表示するので、モックは正しく挿入されます。(また、セットアップ中getString()
の呼び出し内への呼び出しにエラーはありません)。expect()
素敵なモックの代わりにプレーンなモックを使用すると、次のエラーが発生します。
java.lang.AssertionError:
Unexpected method call handleGetObject("Queue"):
getString("Queue"): expected: 1, actual: 0
私が間違っていることは何か分かりますか?
ありがとう。