欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java单元测试

程序员文章站 2022-03-12 18:22:00
单元测试 1.简介 在日常开发中,我们编写的任何代码都需要经过严谨的测试才可以发布。以往的测试方法都是通过编写一个main函数进行简单的测试,并使用大量的print语句输出结果,这种方法其实是不可取的,它将导致大量的冗余代码在程序中,并且是不利于维护的。因此,业界就提出了单元测试的概念。所谓的单元测 ......

单元测试

1.简介

在日常开发中,我们编写的任何代码都需要经过严谨的测试才可以发布。以往的测试方法都是通过编写一个main函数进行简单的测试,并使用大量的print语句输出结果,这种方法其实是不可取的,它将导致大量的冗余代码在程序中,并且是不利于维护的。因此,业界就提出了单元测试的概念。所谓的单元测试是指对软件中的最小可测试进行检查和验证。(最小单元可以是一个方法,也可以是一个类,根据具体的场景进行定义)。在java中通常使用junit工具来完成。

2.使用

将下载的junit的jar文件导入到项目中即可。接下来就可以编写单元测试类,测试类也有相应的命名规范。通常以xxxtest方式来命名,xxx就是你要测试的类名。测试类中编写的任何测试方法是不需要返回值得。测试方法名规范testxxx(),xxx表示目标类中的方法名。

java单元测试

 

2.1 junit的注解

注解 说明
@test 标注在方法上,表示当前方法是一个测试方法
@before 标注在方法上,用于在执行任何单元测试之前先执行的方法
@after 标注在方法上,用于在执行任何单元测之后再执行的方法
@beforeclass 标注在静态方法上,在测试方法之前先执行,且执行一次。通常可用于初始化操作
@afterclass 标注在静态方法上,在测试方法之前先执行,且执行一次。通常可用于初始化操作
@ignore 标注在方法上,表示忽略当前的此方法

例子:

public class userdaotest {
​
    @beforeclass
    public static void before1(){
        system.out.println("before1");
    }
​
    @afterclass
    public static void after1(){
        system.out.println("after1");
    }
​
    @before
    public void before2(){
        system.out.println("before2");
    }
​
    @after
    public void after2(){
        system.out.println("after2");
    }
​
    @test
    public void testsaveuser(){
        userdao dao = new userdao();
        dao.saveuser();
    }
​
    @test
    //@ignore //忽略当前的此方法
    public void testfinduserbyid(){
        userdao dao = new userdao();
        dao.finduserbyid();
    }
}

 


2.2 使用断言(assert)

所谓断言,就是将预期的条件或者表达式参与测试中,判定测试的结果是否达到预期想要的结果。

例子:

import edu.nf.service.userservice;
import org.junit.test;
//使用静态导入(导入的是某个静态方法)
import static org.junit.assert.*;
​
​
public class userservicetest {
​
    @test
    public void testfindusername(){
        userservice service = new userservice();
        //使用断言进行测试
        //第一个参数是此预期返回的结果,第二个是目标方法的返回值
        //如果两个值相等,则测试通过
        assertequals("hh",service.findusername(1001));
    }
}
​

 

assert类中提供了众多的assert方法来进行比较,而这些方法的返回值都是void,如果判定结果不用通过则引发相应的异常信息。常用断言方法如下:

方法 说明
assertequals 判定两个值是否相等
assertnotnull 判定结果不允许为空
assertnull 判定结果为空
assertsame 判定两个对象是否是同一个引用
assertarrayequals 判定两个数组的内容是否相等
... ...

2.3 测试套件

所谓的测试套件,就是将一系列的单元测试类集合中在一起进行批量的单元测试。

测试套件需要的注解:

注解 说明
@runwith 标注在类上,表示当前类是一个测试套件的运行器
@suiteclasses 标注在类上,用于集中所有的单元测试类的class

例子:

@runwith(suite.class)
@suite.suiteclasses({userdaotest.class, userservicetest.class})
public class suitetest {
}
​