• Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.4——使用Espresso测试Activity


    问题:

    你想要使用Google的Espresso测试Activity。

    解决方案:

    在Gradle配置里面增加Espresso,书写测试脚本。

    讨论:

    Espresso测试库已经被添加进“Android Test Kit”项目,作为Google的Android测试工具。因为Espresso是一个Google的项目,并且专门为Android设计,有理由相信它在未来会成为Android测试提供更好的机制。

    尽管这不是一本关于测试的书,搭建和运行Espresso测试适合一般的Gradle实践,所以一个简单的例子在这里。

    Espresso包括在Android Support Repository里面,可以在SDK Manager的“Extras”下面增加:

    为了在项目里面使用Espresso,需要增加androidTestCompile依赖:

    这实际上导致了support library的版本冲突,因为Espresso依赖于版本23.1.1,而SDK23里面包含了23.3.0的同样的库。你会收到下面的错误:

    尽管这个会在你build应用的时候解决,但是让我们解决这个问题。在顶层的Gradle配置文件里面,allProject块里面强制解决方案:

    Espresso要求设置在defaultConfig块里面设置testInstrumentationRunner使用AndroidJUnitRunner:

    Espresso测试喜欢使用静态方法,无论是在Espresso类里面还是在Hamcrest matchers。下面的测试清晰的包含了输入的描述:

    package com.nfjs.helloworldas;
    import android.support.test.rule.ActivityTestRule; 
    import android.support.test.runner.AndroidJUnit4;
    import android.test.ActivityInstrumentationTestCase2;
    import android.test.suitebuilder.annotation.MediumTest; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.click; import static android.support.test.espresso.action.ViewActions.typeText;
    import static android.support.test.espresso.assertion.ViewAssertions.matches; import static android.support.test.espresso.matcher.ViewMatchers.withId;
    import static android.support.test.espresso.matcher.ViewMatchers.withText;
    import static org.hamcrest.CoreMatchers.containsString;

     @RunWith(AndroidJUnit4.class) @MediumTest
      public class MyActivityEspressoTest

        extends ActivityInstrumentationTestCase2<MyActivity> {

        public MyActivityEspressoTest() {

          super(MyActivity.class);

        }

        @Rule

        public ActivityTestRule<MyActivity> mActivityRule =

          new ActivityTestRule<>(MyActivity.class);

        @Test

        public void testHelloWorld() {

          onView(withId(R.id.edit_text))

                    .perform(typeText("Dolly"));
            onView(withId(R.id.hello_button))
    
                    .perform(click());
            onView(withId(R.id.greeting_text))
    
                    .check(matches(withText(containsString("Dolly"))));
    

      }

    简单的语法更关注于用户的行为而不是activity。从这个测试里面,不是很明显的是,点击button实际是从MyAcitivity跳转到WelcomeActivity类,但是实际发生了。结果如下:

    再次点击Devices按钮从device角度看结果:

    Espresso是一个很有趣的写功能测试的DSL。它在未来会成为推荐的API。

    收集测试结果:

    如果你的app包含多个flavors或者modules,HTML测试报告将会组织到分离的子目录下面。单独打开每个文件会很麻烦。

    幸运的是,有一个插件可以将所有报告收集到一个目录下面。在顶级的配置文件里面,在buildscript块后面加上androidreporting插件:

    现在如果你运行mergeAndroidReports任务,所有都会被收集到一个文件里面。

    --continue标志是一个标准的Gradle标志,表示构建会继续即使有失败的测试。多个变体运行的结果如下:

  • 相关阅读:
    HashMap Hashtable LinkedHashMap 和TreeMap
    RestTemplate -springwebclient
    IntelliJ IDEA 12:
    mac安装RabbitMQ
    mysql 常用,使用经验
    消息中间件性能究竟哪家强?
    log4j2配置文件log4j2.xml
    内存增长 避免
    nginx 服务器重启命令,关闭
    jquery获取css color 值返回RGB
  • 原文地址:https://www.cnblogs.com/tootwo2/p/6492992.html
Copyright © 2020-2023  润新知