web-dev-qa-db-ja.com

Android:カスタムビューをテストする方法は?

Androidでの単体テストにはいくつかの方法がありますが、私が作成したカスタムビューをテストするのに最適な方法は何ですか?

現在、インストルメンテーションテストケースでのアクティビティの一部としてテストしていますが、ビューだけをテストして分離したいと思います。

22
futlib

ウェルユニットテストは、ソースコードの個々のユニットをテストして、それらが使用に適しているかどうかを判断する方法です。したがって、カスタムビューをテストする場合は、「onTouchEvent」、「onDown」、「onFling」、「onLongPress」、「onScroll」、「onShowPress」、「onSingleTapUp」などのカスタムビューのさまざまなメソッドを確認できます。ビジネスロジックに応じて、「onDraw」などさまざまなものがあります。モック値を提供してテストできます。カスタムビューをテストする2つの方法をお勧めします。

1)モンキーテストモンキーテストは、自動テストツールによって実行されるランダムテストです。モンキーテストは、特定のテストを考慮せずに実行される単体テストです。この場合のサルは、あらゆる入力のプロデューサーです。たとえば、サルのテストでは、テキストボックスにランダムな文字列を入力して、考えられるすべてのユーザー入力を確実に処理したり、データを盲目的に信頼している読み込みルーチンをチェックするためのガベージファイルを提供したりできます。これはブラックボックステスト手法であり、非常に多くの固有の条件でカスタムビューをチェックできるため、驚かれることでしょう:)。

2)ユニットテスト

2a)Robotiumユニットテストフレームワークを使用する

Robotium.orgまたは http://code.google.com/p/robotium/ にアクセスして、サンプルのテストプロジェクトをダウンロードします。 Robotiumは、Androidアプリケーションのテストを簡単かつ迅速に行える、非常に使いやすいフレームワークです。最小限の労力で高度なAndroidアプリケーションのテストを可能にするために作成しました。 。ActivityInstrumentationTestCase2と組み合わせて使用​​されます。

2b)使用Androidテストフレームワーク

リファレンスへのリンクは次のとおりです。 http://developer.Android.com/reference/Android/test/ActivityInstrumentationTestCase2.html および http://developer.Android.com/reference /Android/test/ActivityUnitTestCase.html

手始めに: http://developer.Android.com/guide/topics/testing/testing_Android.html

あるユーザーによると:プラットフォームに依存しないロジックを簡単にテストすることを除けば、テストを実行するための賢い方法は見つかりませんでした。これまでのところ(少なくとも私にとっては)実際のプラットフォームロジックのテストは面倒です。エミュレータと実際のデバイスの実装に違いがあり、後でアプリケーションを削除するためだけにデバイスで単体テストの実装を実行するのは嫌なので、とにかく簡単ではありません。

私の戦略は次のとおりです。簡潔にしてロジックをよく考えてから、実装を1つずつテストします(あまり望ましくありません)。

また、Stephen Ngは、Androidプロジェクトソリューション: https://sites.google.com/site/androiddevtesting)の実際の単体テストに適したアプローチを提供します。 /

1人のユーザーがスクリーンキャストを作成しました。

これは、ユニットテストを機能させる方法について作成したScreenCastです。コンテキストまたはアクティビティオブジェクトへの参照を持つことに依存する単純な単体テストとより複雑な単体テスト。 http://www.gubatron.com/blog/2010/05/02/how-to-do-unit-testing-on-Android-with-Eclipse/

考えられるすべての条件でカスタムビューをテストするのに役立つことを願っています:)


コメント(futlib)あなたの提案はすべて、ACTIVITYのテストに関係しているようですが、私は本当にVIEWだけをテストしたいと思っています。このビューを他のアクティビティで使用したい場合があるので、特定のビューでテストすることはあまり意味がありません。 – futlib

回答:カスタムビューを実装するには、通常、フレームワークがすべてのビューで呼び出す標準メソッドのいくつかにオーバーライドを提供することから始めます。たとえば、カスタムビューの「onDraw」、「onKeyDown(int、KeyEvent)」、「onKeyUp(int、KeyEvent)」、「onTrackballEvent(MotionEvent)」などです。したがって、カスタムの単体テストを実行する場合は、これらのメソッドをテストし、モック値を指定して、考えられるすべてのケースでカスタムビューをテストできるようにする必要があります。これらのメソッドをテストすることは、アクティビティをテストすることを意味するのではなく、アクティビティ内にあるカスタムビュー(メソッド/関数)をテストすることを意味します。また、ターゲットユーザーが体験できるように、最終的にはカスタムビューをアクティビティに配置する必要があります。徹底的にテストすると、カスタムビューを多くのプロジェクトやアクティビティに配置できます。

18
Muhammad Shahab

ビューに焦点を合わせたTestCaseの実装がない場合の簡単な解決策は、ビューを含むテストプロジェクト内に簡単なアクティビティを作成することです。これにより、単純なアクティビティを使用してビューに対するテストを作成できます。アクティビティテストに関する情報:

http://developer.Android.com/reference/Android/test/ActivityUnitTestCase.html

20
adam

多くの場合に正常に機能する別の提案を次に示します。レイアウトファイル内からカスタムビューを参照していると仮定すると、AndroidTestCaseを使用してビューを拡張し、それに対して単独でテストを実行できます。次にいくつかのサンプルコードを示します。

my_custom_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<de.mypackage.MyCustomView ...

MyCustomView.Java:

public class MyCustomView extends LinearLayout {

    public MyCustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setTitle(CharSequence title) {
        ((TextView) findViewById(R.id.mylayout_title_textView)).setText(title);
    }
...

MyCustomViewTest.Java:

public class MyCustomViewTest extends AndroidTestCase {

    private MyCustomView customView;

    @SuppressLint("InflateParams")
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        customView = (MyCustomView) LayoutInflater.from(getContext())
            .inflate(R.layout.my_custom_layout, null);
    }

    public void testSetTitle_SomeValue_TextViewHasValue() {
        customView.setTitle("Some value");
        TextView titleTextView = (TextView) valueSelection.findViewById(R.id.mylayout_title_textView);
        assertEquals("Some value", titleTextView.getText().toString());
    }
...
15
csoltenborn