0

我有许多自定义 Android 组件,并希望使用 Espresso 对其进行测试。在针对 Espresso 测试运行时,Activity我在目录中添加了一个简单的Activity类,该类以androidTest编程方式创建一个视图,其中包含我的组件,准备好进行测试。

例如,如果我正在测试一个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到 mainAndroidManifest.xml以使其工作,否则Unable to resolve activity for: Intent...在尝试运行测试时会收到错误消息。但是我现在在主清单中有测试活动,这似乎是一件坏事。

如何设置测试清单中包含但不是主要的特定于测试的活动?

我正在使用基于 gradle 的 Android 构建系统。

4

1 回答 1

0

是的,您必须添加MyViewTestActivity到主 AndroidManifest.xml。

如果您查看ActivityInstrumentationTestCase2源代码,您会看到它getActivity()在目标(即,被测应用)上下文中查找已测试的 Activity。

这是源代码的相关部分。

@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 回答