{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
github下载测试源码
在这个codelab中,你将学习如何在androidstudio中配置工程用于测试,在开发机器上编写并运行单元测试,以及如何在手机上做功能ui测试。
你会学到什么
你需要什么
如果是第一次启动androidstudio,从欢迎页选择“startanewandroidstudioproject”。如果已经打开了一个工程,选择file>new>newproject...
“createnewproject”向导会指导整个过程,在第一页输入如下内容:
这样会保证你的代码同codelab讲解的内容具有一致的命名。其他的选项都设置为默认,一路点击next直到工程创建完毕。
点击run按钮检查app是否运行正常,要么从模拟器列表中选择一个启动,要么确认开启了debug模式的设备通过usb同电脑正确连接。
app目前没有做任何事情,但是屏幕上应该显示“helloworld!”和app的名字。
经常被问及的问题
在写测试之前,让我们做下简单的检查,确保工程配置正确。
首先,确认在buildvariants窗口内的testartifact中选择了"unittests"。
然后,在工程的src文件夹内创建test和test/java文件夹。需要注意的是,你不能在android视图下进行这些操作,要么在系统的文件管理器内创建,要么在工程窗口左上方点击下拉菜单选择project视图。最终的工程结构应该是这样的:
(在codelab的剩余部分,你可以返回继续使用android工程视图)
最后,打开工程的build.gradle(module:app)文件,添加junit4依赖,点击gradlesync按钮。
build.gradle
dependencies{compilefiletree(dir:'libs',include:['*.jar'])compile'com.android.support:appcompat-v7:22.1.1'testcompile'junit:junit:4.12'}
当你同步gradle配置时,可能需要联网下载junit依赖。
现在,万事俱备,让我们开始写第一个测试吧。首先,创建一个非常简单的被测类:calculator类。
然后,向类中添加一些基本的算术运算方法,比如加法和减法。将下列代码复制到编辑器中。不用担心实际的实现,暂时让所有的方法返回0。
calculator.java
packagecom.example.testing.testingexample;publicclasscalculator{publicdoublesum(doublea,doubleb){return0;}publicdoublesubstract(doublea,doubleb){return0;}publicdoubledivide(doublea,doubleb){return0;}publicdoublemultiply(doublea,doubleb){return0;}}
androidstudio提供了一个快速创建测试类的方法。只需在编辑器内右键点击calculator类的声明,选择goto>test,然后"createanewtest…"
在打开的对话窗口中,选择junit4和"setup/@before",同时为所有的计算器运算生成测试方法。
这样,就会在正确的文件夹内(app/src/test/java/com/example/testing/testingexample)生成测试类框架,在框架内填入测试方法即可。下面是一个示例:
calculator.java
packagecom.example.testing.testingexample;importorg.junit.before;importorg.junit.test;importstaticorg.junit.assert.*;publicclasscalculatortest{privatecalculatormcalculator;@beforepublicvoidsetup()throwsexception{mcalculator=newcalculator();}@testpublicvoidtestsum()throwsexception{//expected:6,sumof1and5assertequals(6d,mcalculator.sum(1d,5d),0);}@testpublicvoidtestsubstract()throwsexception{assertequals(1d,mcalculator.substract(5d,4d),0);}@testpublicvoidtestdivide()throwsexception{assertequals(4d,mcalculator.divide(20d,5d),0);}@testpublicvoidtestmultiply()throwsexception{assertequals(10d,mcalculator.multiply(2d,5d),0);}}
请将代码复制到编辑器或者使用junit框架提供的断言来编写自己的测试。
终于到运行测试的时候了!右键点击calculatortest类,选择run>calculatortest。也可以通过命令行运行测试,在工程目录内输入:
./gradlewtest
无论如何运行测试,都应该看到输出显示4个测试都失败了。这是预期的结果,因为我们还没有实现运算操作。
让我们修改calculator类中的sum(doublea,doubleb)方法返回一个正确的结果,重新运行测试。你应该看到4个测试中的3个失败了。
calculator.java
publicdoublesum(doublea,doubleb){returna+b;}
作为练习,你可以实现剩余的方法使所有的测试通过。
可能你已经注意到了androidstudio从来没有让你连接设备或者启动模拟器来运行测试。那是因为,位于src/tests目录下的测试是运行在本地电脑java虚拟机上的单元测试。编写测试,实现功能使测试通过,然后再添加更多的测试...这种工作方式使快速迭代成为可能,我们称之为测试驱动开发。值得注意的是,当在本地运行测试时,gradle为你在环境变量中提供了包含android框架的android.jar包。但是它们功能不完整(所以,打个比方,你不能单纯调用activity的方法并指望它们生效)。推荐使用mockito等mocking框架来mock你需要使用的任何android方法。对于运行在设备上,并充分利用android框架的测试,请继续阅读本篇教程的下个部分。
虽然在android框架内支持运行instrumentation测试,但是目前开发重心主要集中在刚刚发布的作为androidtestingsupportlibrary一部分的新的androidjunitrunner。测试库包含espresso,用于运行功能ui测试的框架。让我们通过编辑build.gradle的相关部分来把它们添加进我们的工程。
build.gradle
applyplugin:'com.android.application'android{compilesdkversion22buildtoolsversion"22.0.1"defaultconfig{applicationid"com.example.testing.testingexample"minsdkversion15targetsdkversion22versioncode1versionname"1.0"//addthisline:testinstrumentationrunner"android.support.test.runner.androidjunitrunner"}buildtypes{release{minifyenabledfalseproguardfilesgetdefaultproguardfile('proguard-android.txt'),'proguard-rules.pro'}}//addtheselines:packagingoptions{exclude'license.txt'}}dependencies{compilefiletree(dir:'libs',include:['*.jar'])compile'com.android.support:appcompat-v7:22.0.0'//←makesureit’s22.0.0testcompile'junit:junit:4.12'//addtheselines: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,像上面的代码片段一样。另外,androidstudio可能会提醒你buildtools22.0.1没有安装。你应该接受修复建议,studio会为你安装buildtools或者在build.gradle中把这行修改成已经安装在你电脑的版本。
上面的工作完成后,在buildvariants窗口内切换成androidinstrumentationtests,你的工程应该自动同步。如果没有,点击gradlesync按钮。
在使用espresso进行ui测试前,让我们为app添加一些views和简单的交互。我们使用一个用户可以输入名字的edittext,欢迎用户的button和用于输出的textview。打开res/layout/activity_main.xml,粘贴如下代码:activity_main.xml
还需要在mainactivity.java中添加onclickhandler:
mainactivity.java
publicvoidsayhello(viewv){textviewtextview=(textview)findviewbyid(r.id.textview);edittextedittext=(edittext)findviewbyid(r.id.edittext);textview.settext("hello,"+edittext.gettext().tostring()+"!");}
现在可以运行app并确认一切工作正常。在点击run按钮之前,确认你的runconfiguration没有设置为运行测试。如需更改,点击下拉选项,选择app。
在工程的整体视图上,找到以(androidtest)后缀结尾的包名并创建一个新的java类。可以将它命名为mainactivityinstrumentationtest,将如下代码粘贴过去。
**mainactivityinstrumentationtest.java
packagecom.example.testing.testingexample;importandroid.support.test.instrumentationregistry;importandroid.support.test.espresso.action.viewactions;importandroid.support.test.rule.activitytestrule;importandroid.support.test.runner.androidjunit4;importandroid.test.activityinstrumentationtestcase2;importandroid.test.suitebuilder.annotation.largetest;importorg.junit.after;importorg.junit.before;importorg.junit.rule;importorg.junit.test;importorg.junit.runner.runwith;importstaticandroid.support.test.espresso.espresso.onview;importstaticandroid.support.test.espresso.action.viewactions.click;importstaticandroid.support.test.espresso.action.viewactions.closesoftkeyboard;importstaticandroid.support.test.espresso.action.viewactions.typetext;importstaticandroid.support.test.espresso.assertion.viewassertions.matches;importstaticandroid.support.test.espresso.matcher.viewmatchers.withid;importstaticandroid.support.test.espresso.matcher.viewmatchers.withtext;@runwith(androidjunit4.class)@largetestpublicclassmainactivityinstrumentationtest{privatestaticfinalstringstring_to_be_typed="peter";@rulepublicactivitytestrule
测试类通过androidjunitrunner运行,并执行sayhello()方法。下面将逐行解释都做了什么:
你也可以右键点击域名运行测试,选择run>mainactivityinstrume...(第二个带android图标的)
这样就会在模拟器或者连接的设备上运行测试,你可以在手机屏幕上看到被执行的动作(比如在edittext上打字)。最后会在androidstudio输出通过和失败的测试结果。
github下载测试源码
我们希望你能喜欢本篇教程,并且开始着手测试你的应用程序。接着你可以学习如下内容:
观看下面非常棒的有关androidstudio的视频:
(完)