PowerMockitoを使用してAndroid ActivityクラスをスタブしようとするRuntimeException「Stub!」
-
03-10-2019 - |
質問
私はこれを見つけました 例 PowerMockとEasyMockを使用して、AndroidのメニューとMenuitemクラスをスタブ/モックしました。私は、アクティビティクラスでPowerMockとMockitoで同様のことをしようとしています。
多くの方法が最終的であり、Android.jarでは、すべてがRuntimeException( "Stub!")を投げるだけであることを理解しています。
また、このテストは完了していないことも理解していますが、Androidアクティビティクラスをock笑することが可能かどうかを確認したいだけです。
しかし、PowerMockを使用すると、最終的な方法でクラスを模倣できることを考えると、このコードは機能しないはずですか?
@RunWith(PowerMockRunner.class)
@PrepareForTest(Activity.class)
public class MyTestCase extends TestCase {
public void testPlease_JustWork() throws Exception {
Activity mockActivity = PowerMockito.mock(Activity.class);
PowerMockito.when(mockActivity.getTitle()).thenReturn("Title");
}
}
runtimeexceptionはもはや発生せず、「タイトル」が返されると思いますが、それでも例外をスローします。
私はさまざまなものを試しました doReturn("Title").when(mockActivity).getTitle();
と suppress(constructor(Activity.class));
私は何か間違ったことをしていますか、それともこれは不可能ですか?
解決
私はあなたのコードサンプルを試したばかりで、ここで機能します、奇妙です。 MockitoとJunitを含むPowerMock 1.4.5を依存関係を含めてダウンロードし、SDK(2.2)のAndroid.jarを使用しました。 @PrepareFortestを削除する場合にのみ、例外を除いて失敗します。
編集
参照された記事で提供されている削除された例外コードを使用して、Android.jarを使用できます。
他のヒント
おそらくあなたの質問への直接的な答えではありませんが、あなたは試すことができます ロボレクトリック PCでAndroidアプリの一部をテストするため。
roboElectricはスタブを避けます!例外とあなたにいくつかを与えます 最小限 Androidクラスの実装
Android.jarにはJunit用のスタブが含まれているため、参照されるライブラリの順序が重要であるということです。
テストプロジェクトで、「プロパティ」に移動し、「Javaビルドパス」に移動する場合は、「注文とエクスポート」タブにダウンロードしたPowerMockのフルバージョンに関連付けられていることを確認する必要があります。 その上 Android.jar。そうでない場合、システムは、PowerMockに含まれるjunit.jarからそれらを解決する前に、android.jarからJunit.Frameworkとjunit.Runnerパッケージを解決します。
私はこの質問が古いことを理解していますが、これが適切な答えだと思うので、質問に記録したいと思いました。