Android 单元测试第一篇(Junit4基础使用)

最近重视单元测试,本系列文章为完整的流程记录,如有错误,欢迎指正

一、准备一个被测试类
package com.mango.junittestsample;

/**
 * Created by mango on 2018/4/3.
 * 基础使用
 */
public class Sample1 {
    public String getContent() {
        return "Hello world";
    }

    public int add() {
        return 1 + 1;
    }
}
二、生成一个对应的测试类

操作步骤如下图


Android 单元测试第一篇(Junit4基础使用)_第1张图片
Snip20180403_3.png

Android 单元测试第一篇(Junit4基础使用)_第2张图片
Snip20180403_4.png
Android 单元测试第一篇(Junit4基础使用)_第3张图片
Snip20180403_5.png

结果生成的测试类代码如下

public class Sample1Test {

    private FileWriter _writer;
    private Sample1 _sample1;

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        System.out.println("测试类加载完毕会调用@BeforeClass 标注的方法一次,用以初始化代价较为昂贵的资源");
    }

    @AfterClass
    public static void tearDownAfterClass() {
        System.out.println("测试类测试完毕会调用@AfterClass 标注的方法一次,释放由@BeforeClass创建的资源");
    }


    @Before
    public void setUp() throws Exception {
        System.out.println("@Before 标注的方法每个测试方法执行前会调用一次,用以控制每个测试方法间彼此隔离,不会相互影响");
        String path = "/Users/mango/Desktop/a.txt";
        File file = new File(path);
        if (!file.exists()) {
            file.createNewFile();
        }
        _writer = new FileWriter(file);
        _sample1 = new Sample1();
    }

    @After
    public void tearDown() throws Exception {
        System.out.println("@After 标注的方法每个测试方法执行后会调用一次,用以清理@Before 标注的方法中创建的资源");
        _writer.close();
    }

    @Test
    public void getContent() throws Exception {
        _writer.write(_sample1.getContent());
    }

    @Test
    public void add() throws Exception {
        assertEquals(2, _sample1.add());
    }
}
三、标注说明以及执行顺序
  • @BeforeClass 测试类加载完毕会调用@BeforeClass 标注的方法一次,用以初始化代价较为昂贵的资源
  • @Before 每个测试方法执行前会调用一次,用以控制每个测试方法间彼此隔离,不会相互影响
  • @After 每个测试方法执行后会调用一次,用以清理@Before 标注的方法中创建的资源
  • @AfterClass 测试类测试完毕会调用@AfterClass 标注的方法一次,释放由@BeforeClass创建的资源

一次测试的执行完整的顺序是 @BeforeClass -> @Before -> @After -> @Before -> @After -> @AfterClass。是的@BeforeClass和@AfterClass只会执行一次,@before 和@After 会在每个测试方法调用前和后依次执行一次。

这点可以通过查看控制台输出来验证,如下图


Android 单元测试第一篇(Junit4基础使用)_第4张图片
Snip20180403_8.png
四、执行测试方法
  1. 执行单个测试方法的操作如下图,点击方法左侧的绿色三角箭头,选择 run 即可


    Android 单元测试第一篇(Junit4基础使用)_第5张图片
    Snip20180403_6.png
  2. 执行整个测试类的所有测试方法如下图,点击类名左侧绿色三角箭头,选择 run 即可


    Android 单元测试第一篇(Junit4基础使用)_第6张图片
    Snip20180403_7.png
五、查看测试结果
  1. 查看通过的结果,如下图


    Android 单元测试第一篇(Junit4基础使用)_第7张图片
    Snip20180403_9.png
  2. 查看出错的结果,如下图


    Android 单元测试第一篇(Junit4基础使用)_第8张图片
    Snip20180403_10.png
  3. 下载测试报告,如下图


    Android 单元测试第一篇(Junit4基础使用)_第9张图片
    Snip20180410_27.png
六、常用诊断辅助 API

我们如何判断一个方法的实现是否正确?大多数情况下是通过输入参数和输出结果来判断的,这个时候我们可以通过断言这个API,常用的几个断言如下

//第一类:判断两个值是否相等
static public void assertEquals(long expected, long actual);
static public void assertEquals(Object expected, Object actual);
static public void assertEquals(double expected, double actual, double delta);//delta 表示允许的误差

//第一类:判断两个值是否不相等
static public void assertNotEquals(long expected, long actual);
static public void assertNotEquals(Object expected, Object actual);
static public void assertNotEquals(double expected, double actual, double delta);//delta 表示允许的误差

//第三类:判断结果是否为真或者为假
static public void assertFalse(boolean condition);
static public void assertTrue(boolean condition);

//第四类:判断对象是否为空
static public void assertNull(Object object);
static public void assertNotNull(Object object);

//第五类:判断对象是否是同一个对象
static public void assertSame(Object expected, Object actual);

当然了,上面举例的断言 API 只是几个简单的判断规则,还有一个更加强大的匹配器断言,可以看Android 单元测试第六篇(Hamcrest 匹配器)

你可能感兴趣的:(Android 单元测试第一篇(Junit4基础使用))