AndroidStudio中对Android应用进行单元测试InstrumentationTestCase

真是艰难啊   因为之前没有做过单元测试  基本都是直接在应用里面测试的   可能是因为项目都不是很大 所以好像也没有什么问题  于是今天有点空 就研究一下  听说androidStudio自带jUnit 于是就开始研究了  真艰难。。。各种查资料 全都是在adt下的安卓应用单元测试  查到androidStudio的也都是不知道在说什么 心好累。。。。

搞了一天    终于明白怎么弄了 我们的包名为 in.xjp.testcaseapplication  AndroidStudio 版本为1.2.1.1    系统 ubuntu14.04 x64  jUnit使用AndroidStudio自带版本

文件目录是这样的

Screenshot from 2015-06-04 20:40:30

0.  在app中的build.gradle 文件中的  android的defaultConfig中添加如下

1
testApplicationId "in.xjp.testcaseapplication.test"

其实 这步骤可以省略  默认的值就是包名   这个值表示测试的类在 androidTest这个文件夹下的位置 并 不需要 引入其他的库文件  之前查到好多还都要引入junit 和其他的东西   结果发现其实不需要     默认在androidTest里面有个ApplicationTest的被我删掉了

1.  并 不需要 在AndroidManifest.xml添加额外的配置   之前查到要添加uses-library和instrumentation项  后来试了一下发现不需要

2.   新建一个类 继承自  InstrumentationTestCase ,查到很多是继承自TestCase ,  其实InstrumentationTestCase就是继承自TestCase的

1
public class LogTest extends InstrumentationTestCase {}

这个是用来测试普通的类的  除了这个 还有 ActivityInstrumentationTestCase2 用来测试activity的  ActivityInstrumentationTestCase2 中有方法可以获取到应用的context

除此外还有其他测试用的类   这些类在测试的时候都不用显式调用   除非使用TestSuite来自己控制测试

3.  然后在里面添加方法  这个与其他查到的差不多 ,有一些自带的生命周期的方法可以重写,setUp啊tearDown啊什么的,    所有的用来测试方法都以test开头, 不能有参数, 函数前面有一些描述  @SmallTest @MediumTest  还有其他一些 ,详细可以再查  不过好像不写也没问题

1
2
3
4
5
@SmallTest
public void testTest() throws Exception {
// TO DO
assertEquals(1,3);
}

assertEquals是用来比较预期结果与实际结果的函数  如果一样表示测试通过  如果不一样或者抛出异常表示测试不通过    类似的函数还有好多其他的

所有测试方法在测试的时候都会自动执行  不需要显示调用   之前查到可以用TestSuite 之类的设置测试的类与测试的方法    其实不用也可以

4.  在终端中运行 bashgradle connectedAndroidTest  这个是直接在真机上运行测试 所以要有手机或者虚拟机         包中 in.xjp.testcaseapplication.test中所有继承自InstrumentationTestCase类中的所有的testXXX() 方法都会自动去执行一次  手机上看可能就是闪一下就过去了    测试完成后会自动卸载应用
ps:  发现androidStudio自带的终端蛮好用   暂不知道有没什么图形化方法开始测试

5. 查看测试结果  会自动生成在app/build/reports文件夹下的网页文件中  打开index.html就可以看到测试结果了

这个测试示例已经传到这里