簡體   English   中英

使用Espresso測試Android組件

[英]Testing Android Components With Espresso

我有許多自定義的Android組件,希望使用Espresso對其進行測試。 在針對Activity進行Espresso測試時,我向androidTest目錄添加了一個簡單的Activity類,該類以編程方式創建了一個視圖,其中包含我的組件,可以進行測試。

例如,如果我正在測試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...嘗試運行測試。 但是我現在在主清單中有測試活動,這似乎是一件壞事。

如何設置測試清單中包含但不是主要清單的特定於測試的活動?

我正在使用基於gradle的Android構建系統。

是的,您必須將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組件測試。 這不是理想的方法,但是這種方法我從來沒有遇到任何問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM