(私のアプリケーションでは)いくつかのTextViewで動作するクラスのテストを作成する必要があります。通常、クラスはコンストラクターで親アクティビティとビューリソースIDを取得し、を呼び出してTextViewsとその他のコントロールをロードしますfindViewById
。異なるIDと親アクティビティで数回再利用されます。
これはアプリケーションテストであり、GUIを説明するxmlファイルが存在し、ビューIDはR.id。*として利用できます。しかし、私がアクセスできないテストケースから今それらをロードする方法はActivity
?
私はを試しましたがAndroidTestCase
、アクセスは提供されますがContext
、これではGUIコンポーネントをIDでロード/アクセス/解決するには不十分のようです。それから試してみApplicationTestCase
ましたが、メソッドがほとんどなく、それをApplication
介して取得できるインスタンスにも、IDでGUIコンポーネントにアクセスする明確な方法がありません。
質問:TextView
JUnitテストで、使用しているのと同じR.id.myView
IDを使用
するインスタンスを取得できます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がスローされます。おそらく、アクティビティをそのようにインスタンス化することはできません。これを正しく行う方法は?