软件测试————如何使用Junit进行Java单元测试

文章目录:

  1. 什么是单元测试
  2. Junit单元测试的优势
  3. 如何使用Junit
  4. Junit编码规范

1. 什么是单元测试
“单元测试是测试程序构件(例如,方法或对象类)的过程。各个函数或方法是构件的最简单形式。测试应当用不同的输入参数来调用这些程序。”
以上是《软件工程》一书对此的描述。用自己的话来说,就是对程序模块(软件设计的最小单位)进行测试,检查模块的功能与稳定性。在软件开发的过程中,每当我们实现了某一个模块,就需要测试其是否正常和达到预期,只有在确保每个模块都正常工作的前提下,才能保证整个软件系统的平稳运行。
2. Junit单元测试的优势
如果没有junit,我们是怎么测试软件的?下面举一个例子。
我们先随便编写了一个计算器类,包含加法和减法两个方法。

public class Calculator {
    //加法
    public int add(int a,int b){
        return a+b;
    }
    //减法
    public int subtract(int a,int b){
        return a-b;
    }
}

然后编写测试类测试这两个方法。
首先需要创建对象,然后调用这两个方法,查看输出的结果,发现答案正确。之后再去编写其他模块。

package com.teachertom.calculator;

public class TestCalculator {
    public static void main(String[] args) {
        Calculator calculator=new Calculator();
        System.out.println(calculator.add(5,5));//正确答案10
        System.out.println(calculator.subtract(10,5));//正确答案5
    }
}

这样的方法很不方便,需要手动地对比测试数据,而且当测试量非常大时,我们不可能同时在一个测试类中测试,还需要将部分代码注释;
同时,很多情况下各种数据相互关联,修改一个数据可能影响到其他的数据,极大地增加了测试的工作量,拖慢了工作进度。
于是,我们引入了Junit单元测试。
3. 如何使用Junit
首先,我们需要创建一个与当前包同级的包,命名为xxx.xxx.xxx.test
然后在此包下创建测试类,类名:被测试的类Test
定义我们需要测试的方法,方法名:test测试的方法名,返回类型一般为void,不含参数
随后在方法体上加上@Test,并导入Junit包org.junit.Test.
代码如下:

package com.teachertom.test;

import org.junit.Test;

public class CalculatorTest {
    @Test
    public void testAdd(){

    }

    @Test
    public void testSubtract(){

    }
}

这样每个测试方法都可以单独运行了。以idea为示例,效果应是这样的。

软件测试————如何使用Junit进行Java单元测试

点击方法左边单个三角运行单个方法,点击类名旁的双三角运行所有方法。如果测试方法体中产生了异常就会报错并提示你发生错误的方法。如图发生了算术异常:
软件测试————如何使用Junit进行Java单元测试

下面介绍如何使用Junit判别测试结果。
使用Assert类的静态方法,assertEquals(),包含两个参数,左边是预期值,右边是实际值。当预期值与实际值不同时便会报错。

package com.teachertom.test;

import com.teachertom.calculator.Calculator;
import org.junit.Assert;
import org.junit.Test;

public class CalculatorTest {
    @Test
    public void testAdd(){
        Calculator calculator=new Calculator();
        Assert.assertEquals(10,calculator.add(5,5));
    }

    @Test
    public void testSubtract(){
        Calculator calculator=new Calculator();
        Assert.assertEquals(5,calculator.subtract(10,5));
    }
}

点击运行,实际值与预期值相符,测试通过。
软件测试————如何使用Junit进行Java单元测试
如果不相符,则会出现下列字样。
软件测试————如何使用Junit进行Java单元测试
除此之外,Assert还有一个方法assertArrayEquals(),可以用来测试数组,用法与assertEquals()相同。
@Before与@After注解
在上述的操作中存在一些重复的操作,比如每个方法中都要创建对象。对此,我们可以使用@Before注解来预加载一些内容。
在最后需要关闭和销毁资源的时候,也可以使用@After注解。
@Before和@After注解在程序报错的时候,仍然可以保证数据的初始化和关闭销毁,两个方法是依旧执行的。

package com.teachertom.test;

import com.teachertom.calculator.Calculator;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class CalculatorTest {
    private Calculator calculator;
    @Before
    public void init(){
        calculator=new Calculator();
    }
    @Test
    public void testAdd(){
        Assert.assertEquals(10,calculator.add(5,5));
    }

    @Test
    public void testSubtract(){
        Assert.assertEquals(5,calculator.subtract(10,5));
    }
    @After
    public void close(){
        System.out.println("关闭资源");
    }
}

4.Junit编码规范
在使用Junit的过程中,最好遵循以下规范
类名: 被测试类名Test 例如:CalculatorTest
包名: xxx.xxx.xxx.test例如:com.teachertom.test;
方法名: test测试方法 例如:testAdd
返回值: void
参数列表: 空
*不要忘记添加@Test注解和导入Junit包

上一篇:Junit单元测试


下一篇:Airtest之使用Poco测试Android原生应用