Android單元測試-對View的測試

許佳佳233發表於2017-08-16

前提概要

前兩篇文章分別介紹了單元測試的作用和關於Activity的單元測試,有興趣或者剛入門的讀者可以閱讀以下前兩篇文章:
Android單元測試-作用以及簡單示例
Android單元測試-對Activity的測試

這篇文章對應Activity中View的測試做一個專門的擴充。

主要三個元件(類)

ViewMatchers

這個類中有對View的各種屬性的判斷方法,比如可以判斷id,判斷是否獲取焦點,text內容為什麼之類。
主要有兩種作用,一是可以通過它獲取到介面中的一個特定的View,二是可以通過它對獲取到的View進行屬性的斷言,判斷View的屬性是否正確。

ViewActions

這個物件能讓View進行各種操作,比如點選操作,長按操作等。
主要作用是檢視View在進行某種操作後是否執行了正確的邏輯。

ViewAssertions

這個物件主要是和ViewMatchers 配合使用,用來判斷獲取到的View的屬性是否正確。比如text是否與預期的相等,當下是否是可見的。

基本使用示例

這裡寫圖片描述
如圖主要有一個TextView和一個ListView,測試程式碼如下:

public class MainActivity extends AppCompatActivity {

    private TextView tvMain;
    private ListView lvMain;
    private final String[] listString= {
        "11111","22222","33333","44444","55555"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView() {
        tvMain=(TextView)findViewById(R.id.tv_main);
        lvMain=(ListView)findViewById(R.id.lv_main);

        tvMain.setText("mainTextView");
        lvMain.setAdapter(new ArrayAdapter<>(this,R.layout.item_text_view,listString));
        lvMain.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(MainActivity.this, ((TextView)view).getText(), Toast.LENGTH_SHORT).show();
            }
        });
    }
}
public class viewTest {
    @Rule
    public ActivityTestRule<MainActivity> mActivityRule =
            new ActivityTestRule<>(MainActivity.class);

    @Test
    public void testTextView(){
       onView(withId(R.id.tv_main))
               .check(matches(withText("mainTextView")));
    }

    @Test
    public void testListView(){
        onView(allOf(withId(R.id.tv_test),withText("22222")))
                .perform(click());

    }
}

TextView主要是查詢到這個TextView的id,然後對比一下它的Text是否是“mainTextView”。如果不是的話Test會直接fail。

ListView的測試中如果只通過id查詢顯然是不合適的,因為listView中的每一個item都是相同的佈局,所以可以通過allOf()這個方法進行多個條件的查詢,我們查詢到這個item的id下的text為“22222”的View,然後再執行點選操作。

功能擴充

三個元件使用非常簡單,但是功能也不僅如此,每個類的可使用性都很強,如下羅列各個方法的Reference的連結供讀者參考。

ViewMatchers

https://developer.android.google.cn/reference/android/support/test/espresso/matcher/ViewMatchers.html

ViewActions

https://developer.android.google.cn/reference/android/support/test/espresso/action/ViewActions.html

ViewAssertions

https://developer.android.google.cn/reference/android/support/test/espresso/assertion/ViewAssertions.html#selectedDescendantsMatch(org.hamcrest.Matcher

相關文章