【XIAOJUSURVEY& 北大】Java后端单元测试实践记录

导读:本专栏主要分享同学们在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

每一个测试方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值