1

Androidアプリケーションの機能テストを作成しようとしています。問題は、私が調査したほとんどの機能テストフレームワーク(calabash-android、robotium)には、同じテストでテストできるさまざまなアプリケーションからのアクティビティの数に制限があることです。したがって、1つのワークフローでAndroidの連絡先ピッカーからいくつかの連絡先を選択する必要がある場合、連絡先ピッカーのアクティビティはAndroidの連絡先アプリケーションの一部であり、フレームワークはアプリケーションと連絡先アプリケーションからのアクティビティをテストできないため、フロー全体をテストできません同時に。

私のチームが考えた解決策の1つは、連絡先アクティビティへの呼び出しをモックアウトして、連絡先情報を含むダミーインテントを返し、アプリケーションワークフローをテストできるようにすることでした。私たちはこれを達成するためにmockitoを使用しようとしています。しかし、私はかなり早い段階で立ち往生しています。これが私がやろうとしていることです

MyActivity mockActivity = mock(MyActivity.class);
when(mockActivity.startActivityForResult(<?>,anyInt())).thenReturn(fakeIntent);

2行目の最初のパラメータに何を入れるべきかわかりません。Intent.classとandroid.content.Intent.classを試しましたが、コンパイルエラーが発生します。誰かがmockitoを使用してモック活動に取り組んだことがある場合は、いくつかの助けをいただければ幸いです。

PS-私が正しく理解していれば、モックは機能テストよりもユニットテストで多く使用されています。したがって、これらのテストはよりハイブリッドになります。誰かがアンドロイドでこれらの機能テストを行う方法についてより良い提案を持っているなら、私はすべての耳です。

4

2 に答える 2

0

問題は、テストしているアクティビティを実際に「モック」(実際には「スパイ」) できないことです。これは、Android のインストルメンテーション コードによって制御できないように作成されているためです。制御できる単体テスト環境では、mock(MyActivity.class)orspy(myActivityInstance)パスをたどることができます (アクティビティの元の実装のほとんどを再利用できるため、スパイの方が実際には優れています) が、ここではできません。

このジレンマに対して私が見つけた唯一の解決策は、特定の機能をアクティビティからユーティリティ クラスに移動することでした。理想的には、そのためにroboguice@ContextSingletonを利用します (アクティビティの結果を処理するために s を使用できます)。次に、テスト プロジェクトで、独自のテスト Guice インジェクターを作成し、それをベース アプリケーション インジェクターとして設定してgetActivity()から、初めて呼び出すと、アクティビティがモック ユーティリティ クラスで動作するようになります。

ここで完全なプロセスの概要を説明しました。

于 2013-10-09T07:16:44.800 に答える
0

メソッドのシグネチャを知らずにこれに答えるのは難しいですstartActivityForResultが、一般的な考え方は を使用することany(Xxx.class)ですXxx。 はパラメータの型です。だからどちらか

when(mockActivity.startActivityForResult(any(Xxx.class),anyInt())).thenReturn(fakeIntent);

または(同等の種類)

doReturn(fakeIntent).when(mockActivity).startActivityForResult(any(Xxx.class),anyInt());
于 2012-06-29T06:46:32.987 に答える