Android官方开发文档Training系列课程中文版:Activity测试之UI组件测试
原文地址:http://android.xsoftlab.net/training/activity-testing/activity-ui-testing.html
一般來說,正因為Activity含有UI組件,所以使得用戶可以與程序交互。這節課將會介紹如何測試Activity中的Button組件。在課程學習之后便可以使用相同的方法對其它UI組件進行測試。
Note:這節課中所涉及的UI測試被稱為白盒測試,因為開發者本身持有被測試的源代碼。Android設備框架適用于UI組件的白盒測試。另一種測試類型被稱為黑盒測試,因為不能夠得到程序的源代碼,故此得名。這種測試適用于與其它APP或系統交互的測試情況。黑盒測試在這里并不會涵蓋。有關更多如何執行黑盒測試的相關內容,請參見UI測試指南。
創建UI測試用例
雖然Activity運行于UI線程,但是測試程序本身是運行在子線程中的。這意味著,雖然TestAPP可以引用UI線程的對象,但是如果要更改這些對象的屬性或者發送事件給UI線程,那么將會得到一個WrongThreadException錯誤。
為了可以安全的發送Intent到Activity或者在UI線程中運行測試方法,開發者可以使測試類繼承于ActivityInstrumentationTestCase2類。
設置測試先決條件
當為UI測試設置先決條件時,則需要在setUp()方法中指定TouchMode。設置TouchMode為true可以使后面的測試方法在自動化點擊UI組件時防止真正點擊(例如,測試Button只是調用了它的onclick方法)。另外要確保在調用getActivity()方法之前調用了setActivityInitialTouchMode()方法。
例如:
public class ClickFunActivityTestextends ActivityInstrumentationTestCase2 {...@Overrideprotected void setUp() throws Exception {super.setUp();setActivityInitialTouchMode(true);mClickFunActivity = getActivity();mClickMeButton = (Button) mClickFunActivity.findViewById(R.id.launch_next_activity_button);mInfoTextView = (TextView) mClickFunActivity.findViewById(R.id.info_text_view);} }添加測試方法
一般需要測試的點會包含以下部分:
- 當Activity啟動時,驗證Button的布局是否顯示正確。
- 驗證TextView在初始化時是否是隱藏的。
- 驗證Button按下后,TextView上的文本是否變為了期望的值。
下面將會演示如何測試以上部分:
驗證Button的布局參數
開發者可能需要以下代碼來驗證Button的布局是否正確:
@MediumTest public void testClickMeButton_layout() {final View decorView = mClickFunActivity.getWindow().getDecorView();ViewAsserts.assertOnScreen(decorView, mClickMeButton);final ViewGroup.LayoutParams layoutParams =mClickMeButton.getLayoutParams();assertNotNull(layoutParams);assertEquals(layoutParams.width, WindowManager.LayoutParams.MATCH_PARENT);assertEquals(layoutParams.height, WindowManager.LayoutParams.WRAP_CONTENT); }在調用assertOnScreen()方法時,應當將rootView以及需要驗證的View傳遞進去。如果需要驗證的View沒有在rootView中出現,那么判斷方法會拋出一個AssertionFailedError異常。
開發者還可以通過Button的布局參數來驗證Button的布局是否正確,然后通過判斷方法來驗證Button的高寬是否是期望中的值。
@MediumTest注解說明了這個測試方法應當如何分類。如何分類取決于測試方法的執行時間。
驗證TextView的布局參數
開發者也可能需要通過以下代碼來驗證TextView在初始化時是否是隱藏的:
@MediumTest public void testInfoTextView_layout() {final View decorView = mClickFunActivity.getWindow().getDecorView();ViewAsserts.assertOnScreen(decorView, mInfoTextView);assertTrue(View.GONE == mInfoTextView.getVisibility()); }開發者可以通過getDecorView()方法獲得Activity的DecorView引用。DecorView在布局層級中屬于最高等級的ViewGroup.
驗證Button的行為
開發者可以根據以下測試方法來驗證在Button按下后TextView是否變為可見狀態。
@MediumTest public void testClickMeButton_clickButtonAndExpectInfoText() {String expectedInfoText = mClickFunActivity.getString(R.string.info_text);TouchUtils.clickView(this, mClickMeButton);assertTrue(View.VISIBLE == mInfoTextView.getVisibility());assertEquals(expectedInfoText, mInfoTextView.getText()); }為了可以自動點擊Button,需要調用clickView()方法。該方法需要傳入測試用例的引用以及對應Button的引用。
Note: 輔助類TouchUtils提供了一些用于模擬交互的簡單方法,開發者可以使用這些方法來模擬點擊,拖拽等事件。
Note: TouchUtils中的方法用于從測試線程向UI線程中發送事件。開發者最好不要在UI線程中直接調用TouchUtils的相關方法,否則會引起WrongThreadException異常.
測試注解
以下注解可以用來標明測試方法的大小:
@SmallTest
@MediumTest
@LargeTest
一般來說,一個只有幾毫秒的剪短測試一般應該標為@SmallTest。稍長一點的,大概100毫秒左右的,通常應該標為@MediumTest或@LargeTest,測試的執行時間通常取決于是否需要訪問本地資源或者網絡資源。
開發者應當通過注解來標記測試方法,以便更好的組織、運行測試。
總結
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:Activity测试之UI组件测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 经典的K-means聚类算法
- 下一篇: Android官方开发文档Trainin