Android单元测试系列-Junit

Posted Chris_166

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android单元测试系列-Junit相关的知识,希望对你有一定的参考价值。

书接上文:Android单元测试系列(1)-开篇_Chris_166的博客-CSDN博客

本篇来介绍下Junit的简单使用,当前已经更新到Junit5了,我这里还是以Junit4来说明吧。

一、Junit官网

  • 官网地址

https://junit.org/junit4/

  • 官方入门文档

https://github.com/junit-team/junit4/wiki/Assertions

  • 官方github

https://github.com/junit-team

二、Demo示例

1. 目录结构 

2. 被测试的类

// gradle引入Junit

dependencies 
    testImplementation 'junit:junit:4.+'

// 被测试的类

package com.fanff.unittestdemo;

public class Calculator 
    public int addExact(int x, int y) 
        return x + y;
    

    public int subtractExact(int x, int y) 
        return x - y;
    

    public int multiplyExact(int x, int y) 
        return x * y;
    

    // TODO: zero case
    public int intDivide(int x, int y) 
        return x / y;
    

// 测试类: CalculatorTest.java

package com.fanff.unittestdemo;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

/**
 * 常用的注解说明:
 * @Test:表示一条测试用例;
 * @Before注解的方法在每个测试方法调用之前都会先被调用;
 * @After注解的方法每个测试方法运行结束之后都会别调用;
 * @BeforeClass/@AfterClass:
 * (1) 在跑一个测试类的所有测试方法之前,会执行一次被@BeforeClass注解的方法,执行完所有测试方法之后,会执行一遍被@AfterClass注解的方法。
 * (2) 被这两个annotation修饰的方法必须是静态的。
 */
public class CalculatorTest 

    private static Calculator sCalculator = null;
    
    /**
     * 如果@BeforeClass/@AfterClass注解的setUpGlobalSource()和tearDownGlobalSource()不带static,就会报错:
     * org.junit.runners.model.InvalidTestClassError: Invalid test class 'com.fanff.unittestdemo.CalculatorTest':
     *   1. Method setUpGlobalSource() should be static
     *   2. Method tearDownGlobalSource() should be static
     */
    @BeforeClass
    public static void setUpGlobalSource() 
        System.out.println("setUpGlobalSource enter \\n");
        sCalculator = new Calculator();
    
    @AfterClass
    public static void tearDownGlobalSource() 
        System.out.println("tearDownGlobalSource enter");
        sCalculator = null;
    
    

    @Before
    public void setUp() throws Exception 
        System.out.println("setUp enter");
    
    @After
    public void tearDown() throws Exception 
        System.out.println("tearDown enter \\n");
    

    @Test
    public void testAddExactTest() 
        System.out.println("testAddExactTest enter");
        Assert.assertEquals(8, sCalculator.addExact(2, 6));
    

    @Test
    public void testSubtractExactTest() 
        System.out.println("testSubtractExactTest enter");
        Assert.assertEquals(8, sCalculator.subtractExact(5, -3));
    

    @Test
    public void testMultiplyExact() 
        System.out.println("testMultiplyExact enter");
        Assert.assertEquals(8, sCalculator.multiplyExact(1, 8));
    

    @Test
    public void testIntDivide() 
        System.out.println("testIntDivide enter");
        Assert.assertEquals(8, sCalculator.intDivide(8, 1));
    

 执行结果:

setUpGlobalSource enter 

setUp enter
testIntDivide enter
tearDown enter 

setUp enter
testAddExactTest enter
tearDown enter 

setUp enter
testSubtractExactTest enter
tearDown enter 

setUp enter
testMultiplyExact enter
tearDown enter 

tearDownGlobalSource enter

在Junit的使用中,注意不同注解和断言的作用,这里就不赘述了。

当demo跑起来之后就可以在网上搜下其他的注解和断言(Assert (JUnit API))的用法。

---------------------------------------

引用:单元测试 - JUnit4 详解 | Java 全栈知识体系

----------------------------------------

以上是关于Android单元测试系列-Junit的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio系列-单元测试入门篇

Android Studio系列-Activity单元测试

通过JUnit进行Android单元测试

Android单元测试Junit的配置

从 JUnit 单元测试中设置 android.location.Location 对象的参数

在Android Studio进行“简单配置”单元测试(Android Junit)