Android の単体テストにはいくつかの方法があります。作成したカスタム ビューをテストするのに最適な方法は何ですか?
現在、インストルメンテーション テスト ケースのアクティビティの一部としてテストしていますが、ビューだけを分離してテストしたいと考えています。
Android の単体テストにはいくつかの方法があります。作成したカスタム ビューをテストするのに最適な方法は何ですか?
現在、インストルメンテーション テスト ケースのアクティビティの一部としてテストしていますが、ビューだけを分離してテストしたいと考えています。
ビューに焦点を当てた TestCase 実装がない場合の簡単な解決策は、ビューを含むテスト プロジェクト内に単純なアクティビティを作成することです。これにより、単純なアクティビティを使用してビューに対するテストを作成できます。アクティビティテストに関する情報:
http://developer.android.com/reference/android/test/ActivityUnitTestCase.html
単体テストは、ソース コードの個々の単位をテストして、使用に適しているかどうかを判断する方法です。したがって、カスタム ビューをテストする場合は、「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/guide/topics/testing/testing_android.html
あるユーザーによると、プラットフォームに依存しないロジックを簡単にテストする以外に、テストを実行する賢い方法を見つけられませんでした。これまでのところ (少なくとも私にとっては)、実際のプラットフォーム ロジックのテストは面倒です。とにかく、エミュレーターと実際のデバイスの実装に違いがあり、後でアプリケーションを削除するためだけにデバイスで単体テストの実装を実行するのが嫌いなので、ほとんど簡単ではありません。
私の戦略は次のとおりです。簡潔にしてロジックをよく考えてから、実装を 1 つずつテストします (望ましくない)。
また、Stephen Ng は、Android プロジェクト ソリューションの実際の単体テストの良いアプローチを提供しています: https://sites.google.com/site/androiddevtesting/
1 人のユーザーがスクリーンキャストを作成しました。
これは、単体テストを機能させる方法について作成したスクリーンキャストです。単純な単体テストと、Context または Activity オブジェクトへの参照を持つことに依存するより複雑な単体テスト。 http://www.gubatron.com/blog/2010/05/02/how-to-do-unit-testing-on-android-with-eclipse/
考えられるすべての条件でカスタムビューをテストするのに役立つことを願っています:)
コメント (futlib) すべての提案には ACTIVITY のテストが含まれているようですが、実際には VIEW だけをテストしたいと考えています。このビューを他のアクティビティで使用したい場合があるため、特定のビューでテストすることはあまり意味がありません。– フットライブラリ
回答: カスタム ビューを実装するには、通常、フレームワークがすべてのビューで呼び出す標準メソッドの一部にオーバーライドを提供することから始めます。たとえば、カスタム ビューの「onDraw」、「onKeyDown(int, KeyEvent)」、「onKeyUp(int, KeyEvent)」、「onTrackballEvent(MotionEvent)」などです。したがって、カスタムの単体テストを実行する場合は、これらのメソッドをテストし、モック値を提供して、考えられるすべてのケースでカスタム ビューをテストできるようにする必要があります。これらのメソッドをテストすることは、ACTIVITY をテストすることを意味するのではなく、アクティビティ内にあるカスタム ビュー (メソッド/関数) をテストすることを意味します。また、最終的にターゲット ユーザーが体験できるように、カスタム ビューをアクティビティに配置する必要があります。徹底的にテストしたら、
多くの場合にうまく機能する別の提案を次に示します。レイアウト ファイル内からカスタム ビューを参照していると仮定すると、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());
}
...