测试是开发过程中一个重要步骤,测试时使用的工具就极其重要。本文主要面向初学者,讲述单元测试工具Junit的基本用法。
主要内容:
- 搭建Junit运行环境
- 基本用法:测试类、测试方法
- 常用的注解
搭建Junit环境
有两种方式:
- 导入Jar的方式
- 使用Maven的方式
导Jar包
- 在该项目下建立一个“lib”文件夹;
- 把junit-**.jar和hamcrest-core-**.jar复制到该文件夹下;
- 再选中junit.jar,“Build Path”,”Add to Build Path”,创建引用类库;如图:
导入坐标
Maven坐标:
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
如何获取Jar的坐标:
- https://mvnrepository.com(如果访问较慢,使用科学上网即可解决!)
- 搜索想要的组件
- 复制坐标到pom.xml文件
用法
写测试类:
- 一般一个类对应一个测试类。如Tool.java和ToolTest.java
- 测试类与被测试类最好是放到同一个包中
- 测试类的名字为被测试类的名字加Test后缀
写测试方法:
- 一般一个方法对应一个单元测试方法。
- 测试方法的名字为test前缀加被测试方法的名字,如testAddPerson()。
- 单元测试方法上面要加上@Test注解(org.junit.Test)!
- 单元测试方法不能有参数,也不能有返回值(返回void)!测试的方法不能是静态的方法。
运行测试:
- 选中方法名 --> 右键 --> Run '测试方法名' 运行选中的测试方法
- 选中测试类类名 --> 右键 --> Run '测试类类名' 运行测试类中所有测试方法
- 选中模块名 --> 右键 --> Run 'All Tests' 运行模块中的所有测试类的所有测试方法
执行测试:
- 测试那个方法,加上@Test注解,就把光标放在那个方法里,run as junit test;注意一定要在测试完毕后删除;因为这个测试注解可能会影响正常的代码执行;
- 标准的Junit规范。由于功能代码不能与测试代码相混合,那么就应该把测试代码和功能代码分开
注解
如果测试一个方法的时候需要准备测试的环境或者是清理测试的环境,那么可以使用以下注解:
测试方法执行前后执行(Junit4.xxxx版本)
- @Before:用来修饰方法,该方法会在每一个测试方法执行之前执行一次。
- @After:用来修饰方法,该方法会在每一个测试方法执行之后执行一次。
- @BeforeClass:用来静态修饰方法,该方法会在所有测试方法之前执行一次。
- @AfterClass:用来静态修饰方法,该方法会在所有测试方法之后执行一次。
测试方法执行前后执行(Junit5.xxxx版本)
- @BeforeEach:用来修饰方法,该方法会在每一个测试方法执行之前执行一次。
- @AfterEach:用来修饰方法,该方法会在每一个测试方法执行之后执行一次。
- @BeforeAll:用来静态修饰方法,该方法会在所有测试方法之前执行一次。
- @AfterAll:用来静态修饰方法,该方法会在所有测试方法之后执行一次。
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class Demo {
//准备测试的环境
//@Before
@BeforeClass
public static void beforeRead(){
System.out.println("准备测试环境成功...");
}
//读取文件数据,把文件数据都显示
@Test //当你测试这个方法的时候,就会自动调用@BeforeClass下的方法,执行完本方法后也会自动调用@AfterClass
public void readFile() throws IOException{
FileInputStream fileInputStream = new FileInputStream("F:\\a.txt");
int content = fileInputStream.read();
System.out.println("内容:"+content);
}
@Test
public void sort(){
System.out.println("读取文件数据排序..");
}
//清理测试环境的方法
// @After
@AfterClass //执行所有的测试方法都会只调用一次;
public static void afterRead(){
System.out.println("清理测试环境..");
}
}