0

(私のアプリケーションでは)いくつかのTextViewで動作するクラスのテストを作成する必要があります。通常、クラスはコンストラクターで親アクティビティとビューリソースIDを取得し、を呼び出してTextViewsとその他のコントロールをロードしますfindViewById。異なるIDと親アクティビティで数回再利用されます。

これはアプリケーションテストであり、GUIを説明するxmlファイルが存在し、ビューIDはR.id。*として利用できます。しかし、私がアクセスできないテストケースから今それらをロードする方法はActivity

私はを試しましたがAndroidTestCase、アクセスは提供されますがContext、これではGUIコンポーネントをIDでロード/アクセス/解決するには不十分のようです。それから試してみApplicationTestCaseましたが、メソッドがほとんどなく、それをApplication介して取得できるインスタンスにも、IDでGUIコンポーネントにアクセスする明確な方法がありません。

質問:TextView JUnitテストで、使用しているのと同じR.id.myViewIDを使用 するインスタンスを取得できますActivity.findViewById(R.id.myView)か?できれば、どうやって?

私は試した:

public void testIpSection() {
    Activity act = new Activity();
    act.setContentView(R.layout.testlayout); // NPE thrown
    FragmentManager fm = act.getFragmentManager();
    FSetup setup = (FSetup) fm.findFragmentById(R.id.test_setup); 
    IPSection secs = new IPSection(setup, R.id.sbA0, R.id.sbA1, R.id.sbA2);
}

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/test_setup"
    android:name="com.spectraseis.fo4.qcdownload.FSetup"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >
</fragment>

しかし、テストの2行目からandroid.app.Activity.setContentView(Activity.java:1867)でNPEがスローされます。おそらく、アクティビティをそのようにインスタンス化することはできません。これを正しく行う方法は?

4

1 に答える 1

1

ええ、この方法でアクティビティを作成することはできません。アクティビティをテストするための特別なクラスがあります。このドキュメントを読み、ActivityInstrumentationTestCase2 / ActivityUnitTestCase/SingleLaunchActivityTestCaseから選択します。

于 2013-01-11T12:35:47.820 に答える