Android自动化测试--Local Unit Tests使用

前言

在前面文章中,我大概梳理了一下自己在以往学习到的Android中常用的一些自动化测试,这篇文章就讲一讲如何来一步步使用本地单元测试Local Unit Tests。文章中所讲的都是JUnit 4 在Android中的使用,详细的介绍可以查看这篇文章:

Android自动化测试--学习浅谈

使用

首先我们在Android Studio中新建一个项目,取名为 LocalUnitTests。

Android自动化测试--Local Unit Tests使用_第1张图片
创建项目LocalUnitTests

然后一直选择Next,选择创建一个Empty Activity。

Android自动化测试--Local Unit Tests使用_第2张图片
创建Empty Activity

然后选择Next,使用默认的设置,选择Finish。

Android自动化测试--Local Unit Tests使用_第3张图片
完成创建

项目创建完成后,project面板中默认是Android,我们想将他切换到Project

Android自动化测试--Local Unit Tests使用_第4张图片
点击切换

选中Project

Android自动化测试--Local Unit Tests使用_第5张图片
选中Project

接下来我们展开app,看一下目录结构

Android自动化测试--Local Unit Tests使用_第6张图片
目录结构

从目录结构中我们可以看到,除了main文件夹外,还有两个文件夹androidTest和test。这两个都是Android Studio自动生成的(我的Android Studio版本2.2.3),也就是用来编写我们的测试代码的。为了学习,我们先将相关的全部删掉,只保留main文件夹需要的。

接下来我们看看如何一步一步的来使用,首先在app目录的 build.gradle 文件中添加下面的引入,根据提示点击Sync Now。

dependencies {
    // JUnit 4 framework
    testCompile 'junit:junit:4.12'
}
Android自动化测试--Local Unit Tests使用_第7张图片
testCompile

接下来我们在项目中新建一个Calculation类,并且添加一些我们需要测试的方法

Android自动化测试--Local Unit Tests使用_第8张图片
新建函数

接下来我们添加测试方法,选中add >>点击鼠标右键 >> Go To >> Test

Android自动化测试--Local Unit Tests使用_第9张图片
新建test

选择Create New Test


Android自动化测试--Local Unit Tests使用_第10张图片
Paste_Image.png

Testing library选择JUnit,同时选中待测试的方法,点击OK。


Android自动化测试--Local Unit Tests使用_第11张图片
Paste_Image.png

选择目录为...\app\src\test\java...,点击OK


Android自动化测试--Local Unit Tests使用_第12张图片
Paste_Image.png

我们可以看到,Android Studio已经为我们生成了测试类


Android自动化测试--Local Unit Tests使用_第13张图片
Paste_Image.png

接下来我们编写待测试的方法

public class Calculation {
  /**
   * 简单模拟平时编写的方法
   * @param a
   * @param b
   * @return
   */
  public int add(int a, int b) {
      return a + b;
  }

  public int multiply(int one, int another) {
      return one * another;
  }
}

测试类

public class CalculationTest {

    Calculation calculation;

    @BeforeClass
    public static void start() throws Exception {
        System.out.println("类运行时调用一次");
    }

    @AfterClass
    public static void end() throws Exception {
        System.out.println("类结束时调用一次");
    }

    @Before
    public void before() throws Exception {
        calculation = new Calculation();
        System.out.println("每个test方法前都会调用");
    }

    @After
    public void after() throws Exception {
        System.out.println("每个test方法后都会调用");
    }

    @Test
    public void add() throws Exception {
        System.out.println("test add");
        int r = calculation.add(2, 3);
        Assert.assertEquals(5, r);
    }

    @Test
    public void multiply() throws Exception {
        System.out.println("test multiply");
        int r = calculation.multiply(2, 3);
        Assert.assertEquals(6, r);
    }
}

接下来我们运行一下看看效果,直接测试类上单击鼠标右键 >> 选择Run 'CalculationTest'

Android自动化测试--Local Unit Tests使用_第14张图片
Paste_Image.png

运行结果

Android自动化测试--Local Unit Tests使用_第15张图片
�运行结果

接下来我们修改一下add方法,将正确结果5改为了6,再运行试试

@Test
public void add() throws Exception {
    System.out.println("test add");
    int r = calculation.add(2, 3);
    Assert.assertEquals(6, r);//正确结果5改为了6
}

运行结果

Android自动化测试--Local Unit Tests使用_第16张图片
运行结果

从结果中我们可以看出来,有醒目的红色输出了错误信息,这是因为我们断言的Assert.assertEquals(6, r),与实际得到的值不一致提示我们的。实际测试中我们也是通过Assert.assert来断言预期值与实际值之间的关系来判断结果。除了assertEquals外还有很多其他方法,详细的可以查看官方API Assert。

接下来我们恢复刚刚的修改,然后修改一下Calculation中的add方法,增加了一句log打印语句。

public int add(int a, int b) {
    Log.d("TAG", "add");
    return a + b;
}

然后我们看看运行结果

Android自动化测试--Local Unit Tests使用_第17张图片
运行结果

同样结果中抛出了异常,因为我们刚刚增加的Log.d("TAG", "add");是Android中包含的方法,在java中并没有。而目前我们使用的Local Unit Tests也只是引入了JUnit,所以没办法直接调用。所以就有了我们的设备单元测试Instrumented Unit Tests,详细的使用可以查看我的下一篇文章。

Android自动化测试--Instrumented Unit Tests使用

Demo代码已经放到了Github上:https://github.com/fodroid/LocalUnitTests

如果你觉得有用,请在Github不吝给我一个Star,非常感谢。


写在最后的话:个人能力有限,欢迎大家在下面吐槽。喜欢的话就为我点一个赞吧。也欢迎 Fork Me On Github 。

你可能感兴趣的:(Android自动化测试--Local Unit Tests使用)