Java基础教程(16)-Java单元测试

举报
厨师之乡 发表于 2024/04/25 08:15:26 2024/04/25
【摘要】 什么是单元测试单元测试就是针对最小的功能单元编写测试代码。Java程序最小的功能单元是方法,因此,对Java程序进行单元测试就是针对单个Java方法的测试。 JUnitJUnit是一个开源的Java语言的单元测试框架,专门针对Java设计,使用最广泛。JUnit是事实上的单元测试的标准框架;几乎所有的IDE工具都集成了JUnit;一个JUnit测试包含若干 @Test 方法,并使用 Ass...

什么是单元测试

单元测试就是针对最小的功能单元编写测试代码。Java程序最小的功能单元是方法,因此,对Java程序进行单元测试就是针对单个Java方法的测试。

JUnit

JUnit是一个开源的Java语言的单元测试框架,专门针对Java设计,使用最广泛。JUnit是事实上的单元测试的标准框架;几乎所有的IDE工具都集成了JUnit;

一个JUnit测试包含若干 @Test 方法,并使用 Assertions 进行断言;

单元测试可以确保单个方法按照正确预期运行,如果修改了某个方法的代码,只需确保其对应的单元测试通过,即可认为改动正确。此外,测试代码本身就可以作为示例代码,用来演示如何调用该方法。

使用JUnit进行单元测试,我们可以使用断言( Assertion )来测试期望结果,可以方便地组织和运行测试,并方便地查看测试结果。此外,JUnit既可以直接在IDE中运行,也可以方便地集成到Maven这些自动化工具中运行。

在编写单元测试的时候,我们要遵循一定的规范:

  • 一是单元测试代码本身必须非常简单,能一下看明白,决不能再为测试代码编写测试;
  • 二是每个单元测试应当互相独立,不依赖运行的顺序;
  • 三是测试时不但要覆盖常用测试用例,还要特别注意测试边界条件,例如输入为 0 , null ,空字符串 “” 等情况

在IDEA中创建测试类:

  • 打开实现类,对着方法右键
  • 选go to找到test
  • 要勾选的选项,在勾选完需要测试的方法后,点击OK;

在这里插入图片描述

import static org.junit.jupiter.api.Assertions.*;

class BoxTest {

    @org.junit.jupiter.api.BeforeEach
    void setUp() {
    }

    @org.junit.jupiter.api.AfterEach
    void tearDown() {
    }

    @org.junit.jupiter.api.Test
    void getWh() {
    }
}

JUnit会把带有 @Test 的方法识别为测试方法; 标记为 @BeforeEach 和 @AfterEach 的方法,它们会在运行每个 @Test 方法前后自动运行;
JUnit还提供了 @BeforeAll 和 @AfterAll ,它们在运行所有@Test前后运行; @BeforeAll 和 @AfterAll 也只能标注在静态方法上;

  • 对于实例变量,在 @BeforeEach 中初始化,在 @AfterEach 中清理,它们在各个 @Test 方法中互不影响,因为是不同的实例;

  • 对于静态变量,在 @BeforeAll 中初始化,在 @AfterAll 中清理,它们在各个 @Test 方法中均是唯一实例,会影响各个 @Test 方法

其他注解

排出某些 @Test 方法,不要让它运行,这时,我们就可以给它标记一个 @Disabled;类似 @Disabled 这种注解就称为条件测试,JUnit根据不同的条件注解,决定是否运行当前的 @Test 方法;

为什么我们不直接注释掉 @Test ,而是要加一个 @Disabled ?这是因为注释掉 @Test ,JUnit就不知道这是个测试方法,而加上 @Disabled ,JUnit仍然识别出这是个测试方法,只是暂时不运
行。

JUnit提供了一个 @ParameterizedTest 注解,搭配@ValueSource,用来进行参数化测试。

参数化测试和普通测试稍微不同的地方在于,一个测试方法需要接收至少一个参数,然后,传入一组参数反复运行。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。