Android单元测试-对View的测试

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Double2hao/article/details/77250847

前提概要

前两篇文章分别介绍了单元测试的作用和关于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

展开阅读全文

没有更多推荐了,返回首页