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就可以看到测试结果了

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