9

PowerMock と EasyMock を使用して Android の Menu および MenuItem クラスをスタブ/モック化するこのを見つけました。私は PowerMock と Mockito で Activity クラスを使って同様のことをしようとしています。

多くのメソッドが final であり、Android.jar ではすべて RuntimeException("Stub!") をスローするだけであることを理解しています。

また、このテストが完了していないことも理解していますが、android Activity クラスをモックできるかどうかを確認したいだけです。

しかし、PowerMock では final メソッドを使用してクラスをモックできるため、このコードは機能しないのでしょうか?

@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));

私は何か間違ったことをしていますか、それともこれは不可能ですか?

4

3 に答える 3

5

質問に対する直接的な回答ではないかもしれませんが、PC で Android アプリの一部をテストするためにRobolectricを試すことができます。

ロボエレクトリックがスタブを回避!例外であり、いくつかの最小限のAndroid クラスの実装を提供します

于 2011-09-07T07:46:55.147 に答える
2

android.jar には junit のスタブがいくつか含まれているため、参照するライブラリの順序が重要であるというのが答えだと思います。

テスト プロジェクトで、[プロパティ] に移動してから [Java ビルド パス] に移動すると、ダウンロードしたフル バージョンの powermock に関連付けられている junit jar が、Androidのの [注文とエクスポート] タブに表示されることを確認する必要があります。 .jar. そうでない場合、システムは、powermock に含まれる junit.jar からそれらを解決する前に、android.jar から junit.framework および junit.runner パッケージを解決します。

この質問は古いと思いますが、これが適切な答えだと思うので、質問に必ず文書化したかったのです。

于 2011-10-17T18:37:57.010 に答える
0

コードサンプルを試してみたところ、ここで動作します。依存関係を含む Mockito と JUnit を含む PowerMock 1.4.5 をダウンロードし、sdk (2.2) の android.jar を使用しました。@PrepareForTest を削除すると、例外でのみ失敗します。

編集

参照した記事で提供されている、削除された例外コードで android.jar を使用できます。

于 2010-09-27T22:36:24.677 に答える