单元测试及其工具Junit

1.单元测试是什么

单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。

单元测试是软件测试的一种类型,测试对象是最基础的代码单元(函数、类、模块),属于白盒测试。在经典的测试金字塔中,单元测试处于最底层。

2.单元测试的意义

  1. 确保代码实现符合预期

    单元测试是唯一有可能触达所有代码流程分支的测试手段

  2. 提前发现错误,并以最小的成本修复

    越早发现错误,修复时间越短。

    单元测试的一次发现错误、修复、测试验收循环的周期为数分钟。

    集成(验收)测试的循环周期为小时级。

    线上错误的发现,排查问题,修复,测试环境验证到上线的周期一般半天起步。

  3. 测试代码即文档

    测试代码本身可以诠释业务代码的意图

  4. 放心重构

    单元测试是代码重构的前提

  5. 编写高质量的代码(可测试、无副作用)

    单元测试引导开发人员编写更容易测试的代码。

    更容易测试的代码往往意味着质量更高(SRP,无副作用,圈复杂度低)。

  6. 自动化执行

    单元测试的高运行速度使之可以集成到自动化流水线中。

3、单元测试工具Junit(测试java)

  1. Junit简介
    JUnit是一个Java语言的单元测试框架。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

JUnit通过注解的方式来识别测试方法。目前支持的主要注解有:
@BeforeClass: 修饰的方法会在所有方法被调用前执行,且该方法时静态的,所以当测试类被加载后就接着运行它,而且在内存中他只会存在一份实例,他比较适合加载配置文件(针对所有测试,只执行一次 )
@AfterClass: 所修饰的方法通常用来对资源管理,如关闭数据库连接(针对所有测试,只执行一次 )
@Before和@After 会在每个测试方法前后各执行一次
@Test: 测试方法,在这里可以测试期望异常和超时时间
@Ignore: 忽略的测试方法

  1. Junit特性

    ① 用于测试期望结果的断言(Assertion)

    ② 用于共享共同测试数据的测试工具

    ③ 用于方便的组织和运行测试的测试套件

    ④ 图形和文本的测试运行器

  2. 安装

    下载完以后解压到你喜欢的目录下,假设是JUNIT_HOME,然后将JUNIT_HOME下的junit.jar包加到你的系统的CLASSPATH环境变量中,对于IDE环境,对于需要用到的junit的项目增加到lib中,其设置不同的IDE有不同的设置,这里不多讲。

    而eclipse中自带JUnit,我们可以直接使用。

  3. 在eclipse中建一个测试类用来测试Junit:

    (1)新建一个工程,新建一个要测试的类Calculator。

(2)、工程右键------> properties------> Java Build Path ------> Libraries ------> Add Library

然后选择Junit->next ->选择要添加的Junit的版本->Finish

(3)、点击要测试的类的右键,new 一个Junit Test Case,选择要测试的方法,系统将会自动生成一个Test类。

自己可以在每个生成的方法下进行编辑,测试方法。


其中testMultiply是一个超时测试,在注解Test中添加了参数timeout,限时在1秒内完成

assertEquals是一个断言方法,可以判断传入的两个参数是否相等,若不相等会抛出异常。

5、用到的主要断言方法:

相关推荐
小蒜学长41 分钟前
微信小程序-高校自习室管理系统(代码+数据库+LW)
java·spring boot·后端·微信小程序·自习室管理
鸥梨菌Honevid1 小时前
UVM 中 REQ 和 RSP 类型详解:从通信模型到 item_done 与 put_response
java·前端·servlet
瑞克-桑切斯1 小时前
真实企业场景 运维安全与管理
java·网络·github
老板一杯拿铁1 小时前
Java 八股文面试详解:从基础到进阶的全面梳理
java·面试
const_qiu1 小时前
第 2.5 章 2.5.4-2.5.5:JWT 双 Token 与声明式权限守卫
java·人工智能
bug菌1 小时前
一个周末就想把短链服务推到 10 万 QPS,真能靠加 Redis 做到吗?
java·redis·go
撸串-研究生1 小时前
springboot福利院管理系统73979
java·spring boot·后端·福利院管理系统
不得了zz3 小时前
04-Spring AI Alibaba ReactAgent 生产级实践:工具调用、结构化输出、HITL 与上下文管理
java·ai编程·springaialibaba
猿究院_夏燊3 小时前
SpringMVC 到底是怎么干活的?
java·网络·职场和发展
鶴哥只手遮天3 小时前
Spring Framework 7.0.9 深度剖析-05-配置元数据解析:XML、注解与 JavaConfig
java·后端·开源