私は最終的なメソッドResourceBundle.getString()
への呼び出しをモックしようとしています。 PowerMock 1.4.12およびEasyMock 3.1では、コールは侮られていません。代わりに、 "実際の"メソッドが呼び出されます。PowerMock + EasyMockで最終的な方法を模擬して
私のテストクラス:BeanBeingTestedで
@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);
}
...
}
コード:
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間違いなく(また、セットアップ中にexpect()
コール内のgetString()
へのコールにエラーはありません)。平野モックの代わりに、素敵なモックで
java.lang.AssertionError:
Unexpected method call handleGetObject("Queue"):
getString("Queue"): expected: 1, actual: 0
任意のアイデアをどのような私が間違ってやっていますか?
ありがとうございました。
私も同じ問題に直面しています。しかしこれはまだ助けにはならない。あなたは最終的な方法のみ、または静的な方法を指していますか? – Siddharth
@Siddharth {{PowerMock.mockStaticNice()}}はクラスの静的メソッドをモックしますが、残りのメソッドはそのままです。このスレッドが役に立たない場合は、新しい問題を作成する必要があります。異なる問題があるようだからです。 – Andy
返信ありがとう@Andy。しかし、このスレッドのトピックは最終的な方法について話しますが、静的メソッドについて話しています。何か不足していますか? 私の問題は、模擬しようとしている "public final void"メソッドがあり、テストでは模擬メソッドではなく実際のメソッドが呼び出されているということです。上記の問題は、私が話している問題と異なっていますか?私はいくつかのポイントを逃した場合は申し訳ありません。 – Siddharth