web-dev-qa-db-ja.com

Androidテスト駆動開発

Android=アプリケーションの作成にかなりの経験があります。新しいプロジェクトでは、テスト駆動開発(TDD)を実行することにしました。ユーザーシナリオテスト用のRobotiumに手を出しています。それはうまく機能し、簡単に見えます。

ユニットテストでは、(MockContext Android Class))を使用してコンテキストをモックしようとしましたが、できません。このブログを読みました http://sites.google.com/site/androiddevtesting / そしてこれを通して http://sdudzin.blogspot.com/2011/01/easy-unit-testing-for-Android.html 、これは= Androidアプリはまだ非常に限られていて難しいため、PowerMock、jMockit、JeasyTest、またはRoboelectric(MockitoおよびMavenと組み合わせて)、さらにはRoboGuiceを使用することを推奨しています。

私はあなたの意見でどのユニットテストフレームワークがテストに最適であるかについて皆さんから提案を受けたいと思いますAndroidアプリケーション。(特にテストAndroidクラス、テストケースをできるだけ独立させることができるように、モックコンテキストやその他のモック機能を提供する可能性があります。提案やポインタがあれば参考になります。ありがとう

44
Muhammad Shahab

デバイス外のテストについては、 Robolectric を参照してください

デバイス上のテストについては、 Borachio を参照してください

結論:それでも、うまくやることは非常に、非常に難しいです。状況は改善されていますが(状況は6か月前よりも劇的に改善されています)、Androidは、これまでプログラムを作成した中で最もテストに敵対的な環境です。

30
Paul Butcher

AndroidでTDDを行うには、個人的に次のすべてを使用します。

  • assertj-Android :Androidのアサーション
  • Mockito :モッキングフレームワーク
  • Robolectric :Androidエミュレーターを必要とせずに実行される単体テストフレームワーク
  • Robotium :UIテスト(実行するにはエミュレータまたはデバイスが必要)

また: Dagger または Roboguice などの依存関係注入ライブラリを使用すると、ユニット/統合テストが大幅に簡略化されます。複数のデバイスでテストを実行するには、 Spoon の使用を検討してください。

17
Nima G
  • TDD(またはBDD)のアクティビティの場合は、ActivityInstrumentationTestCase2を使用し、すべてのロジックに対して通常の単体テストを記述します。これは、ロジックをアクティビティから分離するのにも役立ちます。
  • モバイルアプリケーションは本質的にUI中心です。したがって、単体テストが機能テストのように見えても、UIをモックアウトしても意味がありません。
  • インテントにエクストラを追加するには、テストにカスタムインテントを設定するか、設定をオーバーライドしてすべてのテストに適用できます。
  • Androidではモックが多くの問題を引き起こすため、スタブを使用します。

以下に例を示します。ボタンをクリックすると、アクティビティにHello Worldが表示されます-

public class HelloWorldActivityTest extends
        ActivityInstrumentationTestCase2<HelloWorldActivity> {

    private HelloWorld activity;

    public HelloWorldActivityTest() {
        super(HelloWorldActivityTest.class);
    }

    public void testShouldRenderGreetingOnButtonClick() {
        activity = this.getActivity();
        Button button = (Button) activity.findViewById(R.id.btn_greet);
        TouchUtils.clickView(this, button);
        assertEquals("Hello World!",
                ((TextView) activity.findViewById(Android.R.id.greeting_text))
                        .getText());
    }

}

編集:回答を投稿してから、状況が変わりました。 MockitoはAndroidを適切にサポートしています。また、テストについては、開発フェーズでJVMの真のスピードを引き出すために、ActivityInstrumentationTestCase2からRobolectricに移行しました。 Androidテストフレームワークは、単体テストではなく、統合テストと機能テストに最適です。

4

AndroidにTDDを適用するには、 Android Testing Codelab が非常に役立ちます。コードラボでは、テストツールの使用方法とAndroidにTDDを適用する方法を示しています。私はそれを試してみましたが、非常に役に立ちました。

ボーナス:チェック クリーンアーキテクチャ

2
Vijay Vankhede

Android Testing Support Library は、テスト用の広範なフレームワークを提供しますAndroidアプリ。このライブラリは、アプリのテストコードをすばやくビルドして実行できる一連のAPIを提供します。 JUnit 4および機能ユーザーインターフェイス(UI)テストを含みますAndroid Studio IDEまたはコマンドラインからこれらのAPIを使用して作成されたテストを実行できます。

続きを読む:

ありがとうございました :)

1
Pratik Butani

我々は持っています

https://developer.Android.com/training/testing/start/index.html

ローカル(JVMで実行)および機器テスト(デバイスまたはエミュレータで実行)をテストできる

このために追加する必要があります

Android Testing Support Library

Android SDKには、機能レベルのアプリテスト用の2つのツールが含まれています

猿と猿

0
sssvrock