[英]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.