開發(fā)者有時希望能夠在單元測試中顯示界面葵萎,那應該如何做呢平酿?
若有錯漏断凶,煩請斧正魁衙。轉載請注明出處报腔。
- 作者:程序引力 | 謝一 (Evan Xie)
- 郵箱:evanyixie@gmail.com
單元測試主要是針對后臺邏輯的測試,但一些業(yè)務與界面相關的話剖淀,就不僅僅涉及到后臺代碼了纯蛾,可能需要啟動Activity,顯示界面纵隔。本文將介紹若干在單元測試中啟動Activity的方式翻诉。
添加依賴
單元測試啟動Activity必然就依賴Android庫了,自然會考慮使用AndroidJunitRunner捌刮,為此需要在模塊(如app)的build.gradle中添加依賴:
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
撰寫測試代碼
在AndroidStudio中碰煌,通過Ctrl + Shift + T 可以對制定類創(chuàng)建測試類,或在新建module時自動生成的測試類中绅作,撰寫如下代碼:
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
Context appContext = InstrumentationRegistry.getTargetContext();
Intent intent = new Intent(appContext,AnotherActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
appContext.startActivity(intent);
}
}
從代碼中可以看出芦圾,通過InstrumentationRegistry獲取到context,在初始化一個intent俄认,跳轉到AnotherActivity,然后通過context的startActivity方法跳轉个少。
通過AndroidTestRule跳轉
AndroidTestRule作為安卓基礎類庫碍脏,提供了對單個Activity進行測試的能力。為了使用它稍算,一般需要在build.gradle中添加依賴:
androidTestImplementation 'com.android.support.test:rule:1.0.2'
對于AndroidTestRule,提供了多個構造方法役拴,其中最全面的構造方法提供3個參數(shù)傳入糊探,分別是
參數(shù) | 描述 |
---|---|
activityClass | 需要跳轉的class |
initialTouchMode | 是否touch模式 |
launchActivity | 是否每個測試方法都啟動Activity |
下面是示例代碼:
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
Intent intent = new Intent(appContext,OuterActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ActivityTestRule<OuterActivity> activityTestRule = new ActivityTestRule<>(OuterActivity.class, false, false);
activityTestRule.launchActivity(intent);
}
}
與通過context直接啟動Activity不同,該方法是通過初始化一個ActivityTestRule對象河闰,再通過該對象去啟動Activity科平。