1

リストビューを含むいくつかのアクティビティを持つアプリケーションがあります。最初のリストビューからの選択によって2番目のリストビューの内容が決まり、2番目のリストビューによって3番目のリストビューの内容が決まります。

3番目のリストビューをテストしたいのですが、インテントが必要なため、リストは何も返しません。これを修正するために、テストにインテントを手動で追加できます。これは、テストが機能することを意味します。

public InspectionListActivityTest() {
    super(InspectionListActivity.class);
    Intent i = new Intent();
    i.putExtra("guid", "abcbbf2b-5e14-4cb1-af1b-e3084b45d4cf");
    setActivityIntent(i);
}

コードからわかるように、GUIDを使用して、回避したいリストを決定します。テスト中にデータベースを頻繁にクリアするため、このフィールドを常に変更する必要があります。

理想的には、ContentResolverを使用して、別のテーブルから最初のGUIDを取得します。これは、テストで常に情報を取得できることを意味します。

public InspectionListActivityTest() {
    super(InspectionListActivity.class);

    ContentResolver cr = getActivity().getContentResolver();
    Cursor cursor = cr.query(Locations.CONTENT_URI, null, null, null, null);
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            String guid = cursor.getString(cursor.getColumnIndex(Locations.GUID));
            Intent i = new Intent();
            i.putExtra(IntentFilters.LOCATION.getIntent(), guid);
            setActivityIntent(i);
        }
    }
}

ただし、getActivity()メソッドでnullpointerexceptionが発生し、このsetActivityIntentを他の場所に配置できないようです。

4

2 に答える 2

0

これはすべてsetup()、コンストラクターではなく、テストのメソッドで実行する必要があります。テストのコンストラクターは役に立たないため、変更しないでおく必要があります。

于 2013-03-25T14:23:12.263 に答える
0

それは可能ですが、少し面倒です。基本的に、必要なデータベースからGUIDを取得し、元のテストクラスに新しいインテントを作成し、そのGUIDをインテントにアタッチしてから、インテントを開始しました。

public void setUp() throws Exception {
     super.setUp(); 

    solo = new Solo(getInstrumentation(), getActivity());

    activity = getActivity();

    UsefulFunctions.insertDummyData(getActivity());

    ContentResolver cr = getActivity().getContentResolver();
    Cursor cursor = cr.query(Locations.CONTENT_URI, null, null, null, null);

    if (cursor != null) {
        if (cursor.moveToFirst()) {
            guid = cursor.getString(cursor.getColumnIndex(Locations.GUID));

        }
    }

    solo.goBack(); 

    Intent i = new Intent(activity.getApplicationContext(), InspectionListActivity.class);
    i.putExtra(IntentFilters.LOCATION.getIntent(), guid);
    setActivityIntent(i);
    activity.startActivity(i); 


}

ある意味で、最初のリストから始めて、Robotiumにリスト内で目的の画面まで「クリック」させる方が簡単でした。

solo.clickInList(0);

// Locations
solo.clickInList(0);

ListView ls = solo.getCurrentListViews().get(0);

solo.waitForActivity("InspectionListActivity");
于 2013-04-03T11:27:44.520 に答える