导读:本专栏主要分享同学们在XIAOJUSURVEY&北大开源实践课程的学习成果。
专栏背景:【XIAOJUSURVEY&北大】2024滴滴开源XIAOJUSURVEY北大软微开源实践课
文内项目Github:XIAOJUSURVEY
作者:shiyiting763
一、单元测试
(一) 什么是单元测试
单元测试是软件开发中的一种测试方法,它对软件中最小可测试单元(方法/函数/模块)进行独立的测试。单元测试独立于用户界面,关注内部逻辑和功能。
(二) 单元测试的作用
单元测试的主要目的是发现程序中的错误,确保代码的正确性。通过编写和运行单元测试,开发人员可以及早发现并修复bug,从而提高代码质量和开发效率。
二、单元测试框架——Junit
(一) JUnit介绍
1. 单元测试框架
单元测试框架是一种用于编写和运行单元测试的软件工具。单元测试框架提供了一个标准化的环境,用于组织和执行单元测试。
它的主要功能包括:
提供用例组织与执行:大量的测试用例堆砌在一起,容易产生了扩展性与维护性等问题
提供丰富的断言方法:用例执行完之后都需要将实际结果与预期结果相比较(断言),从而断定用例是否执行通过。
提供丰富的日志: 当测试用例执行失败时能抛出清晰的失败原因,当所有用例执行完成后能提供丰富的执行结果。例如,总执行时间、失败用例数、成功用例数等。
从这些特性来看单元测试框架的作用是:帮助我们更自动化完成测试,所以,它是自动化测试的基础。
2. Junit
JUnit 是 Java 语言中最流行和最广泛使用的单元测试框架之一。它提供了断言、测试套件和测试报告等功能。
JUnit 官网:JUnit
(二) JUnit安装
JUnit目前分两个版本:JUnit4 和 JUnit5。JUnit5在JUnit4上新增了一些特性,这里主要介绍JUnit4
安装:打开Maven项目的 pom.xml 文件,添加依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
(三) JUnit编写单元测试
1. 编写单元测试
假如我要测试的类名称是HelloWorld.Java
,那么我创建的测试类通常称为HelloWorldTest.Java
。
如果涉及到覆盖率统计的话,名称不对有可能会被忽略掉
一个简单的单元测试用例
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class HelloWorldTest {
@Test
public void helloTest() {
//逻辑代码
HelloWorld helloWorld = new HelloWorld();
String result = helloWorld.sayHello();
assertEquals("Hello, World!", result);
}
private class HelloWorld {
public String sayHello() {
return "Hello, World!";
}
}
}
@Test:用来注释一个普通的方法为一条测试用例
assertEquals() :方法用于断言两个值是否相等
2. 测试功能模块
被测试类HelloWorld.Java
public class HelloWorld {
public String sayHello(){
return "Hello, World!";
}
}
测试类HelloWorldTest.Java
public class HelloWorldtTest {
@Test
public void testHello() {
HelloWorld helloWorld = new HelloWorld();
String result = helloWorld.sayHello();
assertEquals("Hello, World!", result);
}
}
先 new 出 HelloWorld 类的实例,调用 hello 方法,通过 assertEquals() 断言返回结果。
(四) JUnit断言
JUnit提供的断言方法:
方法 |
说明 |
assertArrayEquals(expecteds, actuals) |
查看两个数组是否相等。 |
assertEquals(expected, actual) |
查看两个对象是否相等。类似于字符串比较使用的equals()方法。 |
assertNotEquals(first, second) |
查看两个对象是否不相等。 |
assertNull(object) |
查看对象是否为空。 |
assertNotNull(object) |
查看对象是否不为空。 |
assertSame(expected, actual) |
查看两个对象的引用是否相等。类似于使用“==”比较两个对象。 |
assertNotSame(unexpected, actual) |
查看两个对象的引用是否不相等。类似于使用“!=”比较两个对象。 |
assertTrue(condition) |
查看运行结果是否为true。 |
assertFalse(condition) |
查看运行结果是否为false。 |
assertThat(actual, matcher) |
查看实际值是否满足指定的条件。 |
fail() |
让测试失败。 |
(五) JUnit注解
JUnit常用的注解如下:
注解 |
说明 |
@Test |
标识一条测试用例。 1. (expected=XXEception.class): 表示期望输出的结果是标识的一个Exception 2. (timeout=xxx):验证超时 |
@Ignore |
忽略被标识的测试用例。 |
@Before |
每一个测试方法之前运行。 |
@After |
每一个测试方法 |