0

多数のカスタム Android コンポーネントがあり、Espresso を使用してそれらをテストしたいと考えています。Espresso テストが に対して実行されると、単純なクラスをディレクトリActivityに追加しました。このクラスは、テストの準備が整ったコンポーネントを含むビューをプログラムで作成します。ActivityandroidTest

たとえば、MyViewコンポーネントをテストしている場合、Espresso テスト クラスは次のようになります。

public class MyViewTest extends ActivityInstrumentationTestCase2<MyViewTestActivity>
{
  private MyViewTestActivity activity;

  public MyViewTest()
  {
    super(MyViewTestActivity.class);
  }

  @Override
  protected void setUp() throws Exception
  {
    super.setUp();
    setActivityInitialTouchMode(false);
    // Launches the activity
    activity = getActivity();
  }

  // Ensure that expected items are present
  public void testLayout()
  {
    onView(withId(activity.view.getId())).check(matches(isDisplayed()));
  }
}

次のように簡単MyViewTestActivityに:

public class MyViewTestActivity extends Activity
{
  private static final Random RANDOM = new Random();

  public LinearLayout layout;
  public MyView view;

  @Override
  public void onCreate(final Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);

    layout = new LinearLayout(this);
    layout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                                                         LinearLayout.LayoutParams.MATCH_PARENT));

    view = new MyView(this);
    view.setId(RANDOM.nextInt());
    view.setItem("Test text");

    layout.addView(view);
    setContentView(layout);
  }
}

私の問題はActivity、この場合はテストクラスをMyViewTestActivityメインに追加して、これを機能させる必要があるように見えることですAndroidManifest.xml。そうしないとUnable to resolve activity for: Intent...、テストを実行しようとするとエラーが発生します。ただし、メイン マニフェストにテスト アクティビティが含まれるようになりました。これは悪いことのように思えます。

テストマニフェストには含まれているがメインのものには含まれていないテスト固有のアクティビティを設定するにはどうすればよいですか?

Android用のgradleベースのビルドシステムを使用しています。

4

1 に答える 1

0

はい、MyViewTestActivityメインの AndroidManifest.xml に追加する必要があります。

ActivityInstrumentationTestCase2ソース コードを見ると、getActivity()ターゲット (つまり、テスト対象のアプリ) コンテキストでテスト対象のアクティビティを検索することがわかります。

ソースコードの関連部分を次に示します。

@Override
public T getActivity() {
    // ...
    final String targetPackage = getInstrumentation().getTargetContext().getPackageName();
    // ...
    a = launchActivity(targetPackage, mActivityClass, null);
    // ...
    setActivity(a);
    // ...
}

私がプロジェクトで行っていることは、一般的な TestingActivity を作成し、それを.testターゲット アプリのパッケージに入れ、すべての GUI コンポーネント テストに使用することです。理想的ではありませんが、このアプローチで問題が発生したことはありません。

于 2014-07-06T13:08:35.170 に答える