Android自动化测试(二)

Android自动化测试(二)

测试是应用开发中不可或缺的一部分。测试所做的工作,虽然不能让用户看到效果,但是想要保证一个有一定用户基础的应用的稳定性,测试是必须做的,否则严重的崩溃率肯定会导致用户的差评或者流失。

Espresso是谷歌力推的一个UI自动化测试框架,新建一个Andrdoid工程的时候默认就引入了Espresso的核心依赖,所以作为Android开发者,非常有必要学习这个框架。

简单测试

新建一个测试类HelloWorldTest

@RunWith(AndroidJUnit4.class)
public class HelloWorldTest {

    @Rule
    public ActivityTestRule<MainActivity> activityRule =
            new ActivityTestRule<>(MainActivity.class);

    @Test
    public void listGoesOverTheFold() {
        onView(withText("Hello World!")).check(matches(isDisplayed()));
    }

}

HelloWorldTest非常简单,就是判断"Hello World!"是不是已经显示在屏幕上

  1. 通过@Rule注解来规定测试的Activity是MainActivity,并且测试完后关闭它
  2. 通过withText方法找到屏幕上的对应的控件
  3. onView方法可以等待寻找完成之后再工作。寻找完成之后,调用check方法来判断该控件是不是已经显示在屏幕上
  4. 点击类旁边的 run Test按钮 测试完成

Espresso

API组成

  • onView()onData()是Espresso和视图交互的入口都是用来定位一个View,onView()是定位普通Vew,onData()可以定位ListVew、GridView 中的一个条目
  • ViewMatchers: 实现了Matcher<? super View>接口,是onView()的参数,将它传到onView()中帮助定位一个View。
  • ViewActions:对一个View的动作,比如点击click(),可以传递给ViewInteraction.perform()方法
  • ViewAssertions:用来断言测试结果是否正确,可以传递给ViewInteraction.check()方法

测试按钮

创建一个clickTest()测试方法,点击界面上的某个按钮

@Test
 public void clickTest(){
        onView(withId(R.id.btn_click))
                .perform(click())
                .check(matches(isDisplayed()));
    }

一般情况下使用withId方法通过View的id来找到一个View,不过有时候可能不同界面中使用了相同的id,这时候可以多个条件一起使用来定位一个View,比如下面

//id为R.id.my_view text为"Hello!"的控件
    onView(allOf(withId(R.id.my_view), withText("Hello!")));
    //既有text "7" 又有text "item: 0"的控件
    onView(allOf(withText("7"), hasSibling(withText("item: 0"))))
        .perform(click());

点击按钮,将TextView的文字由Hello World!改为Hello Espresso!,并检查结果。

app中的代码

final TextView textView = findViewById(R.id.tv_text);
findViewById(R.id.btn_click).setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
                textView.setText("Hello Espresso");
            }
        });

测试类中添加新的测试方法

@Test
    public void matchText(){
   
        //点击按钮,将Hello World!改为Hello Espresso!
        onView(withId(R.id.btn_click)).perform(click());
        //检查TextView上的文字是不是Hello Espresso!
        onView(withId(R.id.tv_text)).check(matches(withText("Hello Espresso!")));
    }

测试RecyclerView

测试RecyclerView,跳到RecyclerView的某一位置处执行点击

首先需要引入一个依赖espresso-contrib这里面包含包含 DatePicker、RecyclerView 和 Drawer 操作、无障碍功能检查以及 CountingIdlingResource

androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.3.0-alpha04'

首先在应用的app中新建一个Activty来显示一个列表,接着前面的例子,在MainActivity中定义一个按钮点击进入列表页。

findViewById(R.id.btn_to_recyclerview).setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
                startActivity(new Intent(getApplicationContext(),RecyclerViewActivity.class));
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值