本篇教程翻译由Google I/O
2015遭有关测试的codelab,掌握正确上网的同室请点击这里看:Unit
and UI Testing in Android
Studio。能力简单,如产生翻译错误,请批评指正。如要转载,请注明出处。
Github下充斥测试源码

三体

目录

  • 在Android Studio中展开单元测试和UI测试 –
    1.概述
  • 当Android Studio中展开单元测试和UI测试 – 2.创立新的Android
    Studio工程
  • 在Android Studio中展开单元测试和UI测试 –
    3.配置支持单元测试的工程
  • 以Android Studio中展开单元测试和UI测试 –
    4.创立第一单单元测试
  • 于Android Studio中展开单元测试和UI测试 –
    5.周转单元测试
  • 每当Android Studio中开展单元测试和UI测试 –
    6.安排支持Instrumentation测试的工程
  • 当Android Studio中展开单元测试和UI测试 –
    7.为app添加简单的互动
  • 在Android Studio中展开单元测试和UI测试 –
    8.创立并运行Espresso测试
  • 以Android Studio中开展单元测试和UI测试 –
    9.贺!

《三体》如果起开头三体世界出现到最后之地球毁灭,这通的主谋祸首居然是政治祸害——文化大革命,这可看就是乱说。但于小说的首先部《三体之不易边界》,讲述的凡三体星人已经上马窥伺地球,并攻击地球上量子物理,以阻止人类的是发展,而三体星人是安得知地球的坐标,这一体的归功都来于一个老小———叶文洁。

1.概述

每当是codelab中,你以学习怎样当Android
Studio中布置工程用于测试,在开发机器及编制并运行单元测试,以及怎样以手机及召开功能UI测试。

君晤面套到啊

  • 更新包含JUnit和Android Testing Support Library的Gradle构建文件
  • 修运行在本机Java虚拟机上之单元测试
  • 编排运行在手机或虚拟机上之Espresso测试

卿待什么

  • Android
    Studio
    v1.2+
  • Android 4.0+的测试设施

启观看叶文洁是地三体党之特首,我为震惊了,不断产生疑问,怎么可能是其。直到它描述了有关了它的整个,我明白了,这总体还是如此真实,也是那虚幻。

2.创办新的Android Studio工程

而是率先糟启动Android Studio,从迎页选择“Start a new Android
Studio project
”。如果既打开了一个工程,选择File>New>New
Project…

Create new project”向导会指导整个过程,在第一页输入如下内容:

Setting Value
Application Name TestingExample
Company demain testing.example.com

这般见面管你的代码和codelab讲解的情有所同样的命名。其他的挑三拣四项都安装为默认,一路点击Next以至工程创建了。

点击Run按钮检查app是否运行正常化,要么从模拟器列表中挑选一个起步,要么确认被了debug模式的配备经过USB同电脑科学连接。

app目前莫做任何工作,但是屏幕上应当显得“Hello world!”和app的名字。

科学 1

时不时为问及的问题

  • 怎安装Android
    Studio?
  • 什么打开USB调试?
  • 干什么Android
    Studio找不至自己的配备?
  • Android错误:无法将*.apk安装至设备上:超时?

球毁灭之初步竟然是根源十年文革的震慑,十年文革给叶文洁带来的满载是惨痛,她亲眼看正在和谐之爸在温馨之前头倒下,而其也无力回天,她圈正在红卫兵把母亲逼疯,把大抽打致死,而其只能眼睁睁的拘留在。这一切都是文革给他带的,但是被她带来的还远不止这些,她觉得自己是幸运的,还能够像正规知青一样去遥远的非常山里插队,她觉得自己是甜之,还能像女孩同样让人家去怜惜,直到它为人所扔,她不再相信别人了。

3.部署支持单元测试的工

在描写测试之前,让我们开下简单的反省,确保工程安排不错。

首先,确认在Build Variants窗口内之Test Artifact受到精选了”Unit
Tests”。

科学 2

下一场,在工程的src文件夹内创造testtest/java文本夹。需要小心的是,你无克在Android目图下开展这些操作,要么以网的文件管理器内创建,要么在工程窗口左上方点击下拉菜单选择Project视图。最终之工组织应当是这样的:

科学 3

(在codelab的剩余部分,你可以回继续采用Android工程视图)

末尾,打开工程的build.gradle(Module:app)文件,添加JUnit4依赖,点击Gradle
sync
按钮。

build.gradle

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    testCompile 'junit:junit:4.12'
}

当你一起Gradle配置时,可能需要联网下载JUnit依赖。


阴差阳错的气数安排,让它赶到了红岸基地。本以为自己就一辈子就比如罪人般,永远为囚禁在雷达峰上,永远只是属于红岸基地。

4.创造第一独单元测试

今日,万事俱备,让我们开始勾画第一只测试吧。首先,创建一个非常简单的为测类:Calculator类。

科学 4

然后,向类吃补充加有中坚的算术运算方法,比如加法和减法。将下列代码复制到编辑器中。不用顾虑其实的落实,暂时被有的艺术返回0。

Calculator.java

package com.example.testing.testingexample;

public class Calculator {

    public double sum(double a, double b){
        return 0;
    }

    public double substract(double a, double b){
        return 0;
    }

    public double divide(double a, double b){
        return 0;
    }

    public double multiply(double a, double b){
        return 0;
    }
}

Android
Studio提供了一个飞快创建测试类的法子。只需要于编辑器内右键点击Calculator类的宣示,选择Go
to > Test
,然后“Create a new test…”

科学 5

每当开拓的对话窗口被,选择JUnit4和”setUp/@Before“,同时也拥有的计算器运算生成测试方法。

科学 6

然,就见面在不利的文书夹内(app/src/test/java/com/example/testing/testingexample)别测试接近框架,在框架内填充入测试方法即可。下面是一个演示:

Calculator.java

package com.example.testing.testingexample;

import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.*;

public class CalculatorTest {

    private Calculator mCalculator;

    @Before
    public void setUp() throws Exception {
        mCalculator = new Calculator();
    }

    @Test
    public void testSum() throws Exception {
        //expected: 6, sum of 1 and 5
        assertEquals(6d, mCalculator.sum(1d, 5d), 0);
    }

    @Test
    public void testSubstract() throws Exception {
        assertEquals(1d, mCalculator.substract(5d, 4d), 0);
    }

    @Test
    public void testDivide() throws Exception {
        assertEquals(4d, mCalculator.divide(20d, 5d), 0);
    }

    @Test
    public void testMultiply() throws Exception {
        assertEquals(10d, mCalculator.multiply(2d, 5d), 0);
    }
}

请求以代码复制到编辑器或者应用JUnit框架提供的断言来编排好之测试。


红岸基地是文革期间超前思维的名堂,探秘于外太空生命的绝密基地,通过强功率声波获得外太空的体现。看似就像无忠实的童话,而就童话却真真的发了。叶文洁不断深入挖掘,并发现红岸基地最充分的暧昧,是会同外星文明接触,而就它只是认为理论及是好尽,但却从未当真操作过,她带来在友好的疑问尝试在实验自己之想法,想经过合努力最终验明正身一项事:宇宙中审仅于地上起灵性生命?

5.运作单元测试

算是到运行测试的当儿了!右键点击CalculatorTest类,选择Run >
CalculatorTest
。也可以经命令执行运行测试,在工程目录外输入:

./gradlew test

不管怎样运行测试,都应有看输出显示4单测试都黄了。这是意料的结果,因为咱们尚尚未兑现运算操作。

科学 7

让咱们修改Calculator类中的sum(double a, double b)措施返回一个不利的结果,重新运行测试。你该看4独测试着之3个败了。

Calculator.java

public double sum(double a, double b){
    return a + b;
}

当练兵,你得实现多余的措施而有的测试通过。

恐怕而曾注意到了Android
Studio从来没为您总是装置或者启动模拟器来运作测试。那是坐,位于src/tests目录下的测试是运作于本地电脑Java虚拟机上的单元测试。编写测试,实现效益要测试通过,然后再次补充加更多之测试…这种工作方法要快速迭代成为可能,我们称为测试驱动开发
值得注意的凡,当以该地运行测试时,Gradle为你于环境变量中提供了涵盖Android框架的android.jar包。但是它们功能未完(所以,打独如,你免可知止调用Activity的计并愿意其生效)。推荐应用Mockito齐mocking框架来mock你待采取的任何Android方法。对于运行于装置及,并充分利用Android框架的测试,请继续读书本篇教程的生只部分。


它们发现了以红岸基地的发射功率能量扩大之心腹,通过发射功率的增长,是会将球信息传输到他太空无限远,直到有性命将消息接收。最后它们的确如此做了,她通过试验证实了和睦之想法。

6.部署支持Instrumentation测试的工

虽于Android框架内支持运行instrumentation测试,但是当前开销主体主要汇集在刚刚宣布的作为Android
Testing Support
Library
一对之新的AndroidJUnitRunner。测试库包含Espresso,用于运行效果UI测试的框架。让咱们经过编制build.gradle的相干部分来拿它添加进我们的工。

build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.example.testing.testingexample"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"

        //ADD THIS LINE:
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    //ADD THESE LINES:
    packagingOptions {
        exclude 'LICENSE.txt'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.0.0' //← MAKE SURE IT’S 22.0.0
    testCompile 'junit:junit:4.12'

    //ADD THESE LINES:
    androidTestCompile 'com.android.support.test:runner:0.2'
    androidTestCompile 'com.android.support.test:rules:0.2'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.1'
}

重要:由于局部乘版本冲突,你需要承认com.android.support:appcompat-v7仓库的版本号是22.0.0,像上面的代码有一样。
此外,Android
Studio可能会见唤醒你Build Tools 22.0.1尚无安装。你当受修复建议,Studio会为而安装Build
Tools或者以build.gradle中把立即行修改成已设置于公电脑的版。

面的做事做到后,在Build Variants窗口内切换成Android
Instrumentation Tests
,你的工程应自行同步。如果没,点击Gradle
sync
按钮。


它首先赖的尝试向他太空发出了音,被三体星人所阻,不过当下同不行并没有产生什么,三体星人向叶文洁有了信息,等了几乎年后,叶文洁收到这则消息后,却觉得好奇与困惑。

7.为app添加简单的彼此

科学 8

在运Espresso进行UI测试前,让我们啊app添加一些Views和概括的交互。我们利用一个用户可输入名字的EditText,欢迎用户的Button和用来出口的TextView。打开res/layout/activity_main.xml,粘贴如下代码:
activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:text="@string/hello_world" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:hint="Enter your name here"
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Say hello!"
        android:layout_below="@+id/editText"
        android:onClick="sayHello"/>
</RelativeLayout>

尚亟需在MainActivity.java中添加onClick handler:

MainActivity.java

public void sayHello(View v){
    TextView textView = (TextView) findViewById(R.id.textView);
    EditText editText = (EditText) findViewById(R.id.editText);
    textView.setText("Hello, " + editText.getText().toString() + "!");
}

而今好运行app并确认一切工作正常化。在点击Run按钮前,确认你的Run
Configuration
尚未设置为运行测试。如要改变,点击下拉选项,选择app


如若它与三体星人取得联络的行为为自己的领导者所知晓,这件事涉重大,她的负责人得以乘此机会扬名立万,而其吧懂得好之身份,自然非敢和他争功,但是她底目的并仅仅如此,她思量三体星人降临地球,拯救思想肮脏的人类。

8.创造并运行Espresso测试

科学 9

于工程的一体化视图上,找到为(androidTest)后缀结尾的包名并创立一个初的Java类。可以将它定名为MainActivityInstrumentationTest,将如下代码粘贴过去。

*** MainActivityInstrumentationTest.java*

package com.example.testing.testingexample;

import android.support.test.InstrumentationRegistry;
import android.support.test.espresso.action.ViewActions;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.LargeTest;

import org.junit.After;
import org.junit.Before;
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.closeSoftKeyboard;
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;

@RunWith(AndroidJUnit4.class)
@LargeTest
public class MainActivityInstrumentationTest {

    private static final String STRING_TO_BE_TYPED = "Peter";

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

    @Test
    public void sayHello(){
        onView(withId(R.id.editText)).perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard()); //line 1

        onView(withText("Say hello!")).perform(click()); //line 2

        String expectedText = "Hello, " + STRING_TO_BE_TYPED + "!";
        onView(withId(R.id.textView)).check(matches(withText(expectedText))); //line 3
    }

}

测试类通过AndroidJUnitRunner运行,并执行sayHello()方式。下面用逐行解释都举行了啊:

  • 1.首先,找到ID为editText的view,输入Peter,然后关门键盘;
  • 2.接下来,点击Say hello!的View,我们从不在布局之XML中呢是Button设置id,因此,通过查找它点的仿来找到其;
  • 3.最后,将TextView直达的文本和预期结果相比,如果一致则测试通过;

汝啊得右键点击域名运行测试,选择Run>MainActivityInstrume…(第二个带Android图标的)

科学 10

然便会以模拟器或者连续的装置上运行测试,你可于大哥大屏幕上收看于实施之动作(比如以EditText落得打字)。最后会当Android
Studio输出通过与挫折的测试结果。

Github下充斥测试源码


三体星人曾为其来警示,不要过来信息,不然地球将见面被三体星球锁定目标,作为攻击对象,而正当叶文洁犹豫的时光,却让意外的觉察,所以她只好对领导人员下手,她为打造假象,让管理者因始料不及而死亡,却非料到自己之先生如果陪自己之领导人员一同,无奈两人还落下悬崖致死,而她底满心并没有用只要不快,她最终还是过来三体星球的音讯,她盼望三体星人降临地球,拯救全人类的文明礼貌。

9.祝贺

咱们愿意而能好本篇教程,并且开始着手测试你的应用程序。接着你可学习如下内容:

  • 打探又多关于单元测试和instrumentation测试的界别;

  • 刺探再多关于设置Android Testing Support
    Library;

  • 视下面非常深的有关Android Studio的视频:

    • Introduction to Android
      Studio
    • Introducing Gradle (Ep 2, Android
      Studio)
    • Layout Editor (Ep 3, Android
      Studio)
    • Debugging and testing in Android Studio (Ep 4, Android
      Studio)
  • 在Github下充斥Google测试示例代码

(完)

它对准及时冷漠之社会风气,已经扣押得死理解,她唯有想发雷同天三体裁星人能够亲临。叶文洁对地已经起根本,对全人类的文明也都彻底。只有期待再次尖端的大方才能够挽救全人类就脆弱的文明礼貌。

文革对其是惊天动地的打击,命运对它是无情的配备,她承受不住命运之无情,而要团结是力所能及转移它们,但结尾,并无可知起任何移,不过是为其无情之损毁而已。

敬请期待下一致篇《三体之黑暗森林》:地球文明的防守