PowerMockitoを使用してAndroid ActivityクラスをスタブしようとするRuntimeException「Stub!」

StackOverflow https://stackoverflow.com/questions/3739737

質問

私はこれを見つけました 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パッケージを解決します。

私はこの質問が古いことを理解していますが、これが適切な答えだと思うので、質問に記録したいと思いました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top