自动化测试的重要性做Android开发的开发人员应该都了解吧,在开发过程中我们需要实时对我们已有的代码进行测试,由于是会相互影响的,有时候我们开发新功能的时候会发现原先是OK的部分,却在交付的时候出现了异常,所以一些稍稍正规点的公司都会要求在开发过程中对重要的部分编写测试用例进行自动化测试,这些用例就像哨兵一样看着应用的每个功能和每段逻辑,这个在敏捷开发中显得尤为重要。在提交了代码就让它自动执行自动化测试用例,一旦测试不通过就意味着你的代码影响了某个功能点。还有一种情况是有时候测试工程师报出的问题是偶现的,几百次可能还不会出现一次,在Log中分析到了可能的原因,你修改后不知道是否真正解决了这个问题,那要怎么办?自己手动验证?叫测试帮忙验证?这些都不大现实吧,这时候就要借助自动化测试工具来进行测试了。写个用例让它没日没夜得跑,跑它个几百次看下是否还有异常。
随着Android Studio的功能不断完善,对自动化测试的支持也不断加强,最早的时候在Android studio上搭建个自动化测试就得耗费一整天,某些自动化测试框架由于使用说明很少会给搭建带来更大的困难。借下来的部分将会以Android Studio 2.2为开发环境介绍自动化测试平台的搭建。这里主要介绍Expresso,UiAutomater,Roblolectric,JUnit这四个主流的自动化测试框架,其中前两者是UI测试框架,一般用于功能测试,后两者是单元测试框架,一般用于逻辑测试。这四者各有各的优点,也各有各的不足。

依赖关系

在Android Stdio 2.2 Preview 版本中一旦创建了一个项目就会自动导入Junit4以及Expresso的依赖如下所示:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'
testCompile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support:support-annotations:23.3.0'
}

并且帮你创建好了功能测试和单元测试的目录如下所示:

下面我们就以Calculater这个类作为待测试的类看下逻辑用例如何创建:

  1. 创建一个待测试类:

    public class Calculater {

    public int add(int a,int b) {
    }

    public int sub(int a,int b) {
    }

    public int mul(int a,int b) {
    }
    }
  2. 按下Ctrl + Shint + T选择Create New Test…
    在弹出的对话框中编辑测试类的类名,勾选要进行测试的方法,以及是否创建setup/tearDown方法

  3. 紧接着选择要放置的路径,这里选择的是test目录:

  4. 这时候就会自动生成如下的代码

    public class CalculaterTest {
    @Before
    public void setUp() throws Exception {

    }

    @After
    public void tearDown() throws Exception {

    }

    @Test
    public void add() throws Exception {

    }

    @Test
    public void sub() throws Exception {

    }

    @Test
    public void mul() throws Exception {

    }

    }
  5. 在对应的方法的测试方法中编写对应的测试:

    public class CalculaterTest {

    private Calculater mCalculater;
    @Before
    public void setUp() throws Exception {
    mCalculater = new Calculater();
    }

    @After
    public void tearDown() throws Exception {
    mCalculater = null;
    }

    @Test
    public void add() throws Exception {
    assertNotNull(mCalculater);
    assertEquals(5,mCalculater.add(2,3));
    }

    @Test
    public void sub() throws Exception {
    assertNotNull(mCalculater);
    assertEquals(5,mCalculater.sub(12,7));
    }

    @Test
    public void mul() throws Exception {
    assertNotNull(mCalculater);
    assertEquals(6,mCalculater.mul(2,3));
    }
    }
  6. 有了上面的测试类就可以编写待测试的类了,比如如下所示

    public class Calculater {

    public int add(int a,int b) {
    return a + b;
    }

    public int sub(int a,int b) {
    return a - b;
    }

    public int mul(int a,int b) {
    return a * b;
    }
    }
  7. 点击如下所示左边的绿色箭头就可以运行整个测试类中的测试用例

运行结果如下:

  1. 点击每个方法左边的绿色标志就可以触发单个方法的测试

运行结果如下

Contents
  1. 1. 依赖关系