Java 之单元测试
单元测试编写
Junit 单元测试框架
对于Java语言而言,其单元测试框架,有Junit和TestNG这两种,
下面是一个典型的JUnit测试类的结构
package com.example.demo;import org.junit.jupiter.api.*;import static org.junit.jupiter.api.Assertions.*;@DisplayName("售票器类型测试")
class DemoTest {// 定义测试的实例private Demo demo;// 定义前缀 整个测试类开始执行的地方@BeforeAllpublic static void init(){}// 定义后缀,整个测试类完成后执行的操作@AfterAllpublic static void cleanup(){}// 定义每个测试用例开始执行前的操作@BeforeEachpublic void create(){this.demo = new Demo();}// 定义在每个测试用例完成后执行的操作@AfterEachpublic void destory(){}// 执行测试用例@Test@DisplayName("售票后的余额减少")public void shouldReduceInventoryWhenticketSoldOut(){}@Testpublic void ming(){}
}
测试结果如图所示
层次性表达测试用例
测试用例较多的情况下,为了层次性表达测试用例,使用Junit的Nested注解有层次的表达测试用例
package com.example.demo;import org.junit.jupiter.api.*;@DisplayName("交易服务测试")
class DemoTest {@Nested@DisplayName("用户交易测试")class Test02{@Test@DisplayName("交易检查测试")public void test01(){}}
}
使用Tag标签区分测试用例
在执行Maven打包的时候,使用tage注解,可以有选择的执行一些测试命令
package com.example.demo;import org.junit.jupiter.api.*;@DisplayName("交易服务测试")
class DemoTest {@Test@DisplayName("售票后额度减少")@Tag("fast")public void test01(){}@Test@DisplayName("一次性减少车票")@Tag("slow")public void test02(){}
}
添加相关的插件
<plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.0</version><configuration><properties><includeTags>fast</includeTags><excludeTags>slow</excludeTags></properties></configuration></plugin>
断言
使用Junit命令进行断言处理
@Test@DisplayName("售票后额度减少")@Tag("fast")public void test01(){String s = "ming";Assertions.assertTrue(s.startsWith("ming"));Assertions.assertTrue(s.endsWith("g"));Assertions.assertEquals(5, s.length());}
此时断言错误。
单元测试的目的
提升软件质量
优质的单元测试可以保障,开发质量和程序的健壮性,在大多数互联网企业中,开发工程师,都会频繁的执行测试用例。
促进代码的优化
单元测试是由开发工程师编写和维护的,这会促进开发工程师不断的重新审视自己的代码质量。
提高研发效率
单元测试,虽然占用的大量的时间,但是对后续的联调,集成等,都可以进一步的提高研发的效率。
增加重构的自信
代码重构往往是牵一发而动全身的,当修改底层代码的时候,通过不断的单元测试,可以增加重构的软件的自信。
单元测试的基本原则
单元测试要符合AIR原则。单元测试,符合以下三个原则
- 自动化
- 独立性
- 可重复
单元测试覆盖率
语句覆盖
又称行覆盖(LineCoverage),段覆盖(SegmentCoverage),基本块覆盖(BasicBlockCoverage),这是最常用也是最常见的一种覆盖方式,就是度量被测代码中每个可执行语句是否被执行到了。
判定覆盖
又称分支覆盖(BranchCoverage),所有边界覆盖(All-EdgesCoverage),基本路径覆盖(BasicPathCoverage),判定路径覆盖(Decision-Decision-Path)。它度量程序中每一个判定的分支是否都被测试到了。
条件覆盖
它度量判定中的每个子表达式结果true和false是否被测试到了
路径覆盖
又称断言覆盖(PredicateCoverage)。它度量了是否函数的每一个分支都被执行了
微信公众号
Java 之单元测试相关推荐
- ABAP和Java的单元测试Unit Test
ABAP ABAP class单元测试的执行入口,CLASS_SETUP, 是硬编码在单元测试框架实现CL_AUNIT_TEST_CLASS里的. 待执行的单元测试方法通过CL_AUNIT_TEST_ ...
- 聊聊 Java 的单元测试
单元测试框架 Java 中,JUnit 和 TestNG 是最受欢迎的单元测试框架. JUnit TestNG JUnit 首先是大名鼎鼎的 JUnit ,JUnit 已经成为 Java 应 ...
- 聊聊Java的单元测试
单元测试框架 Java 中,JUnit 和 TestNG 是最受欢迎的单元测试框架. JUnit TestNG JUnit 首先是大名鼎鼎的 JUnit ,JUnit 已经成为 Java 应 ...
- (60)Java基础 --单元测试
目录 一.测试的概念 二.使用Junit4.x进行单元环境 1.环境搭建 2.使用步骤 3.常见注解 三.规范的Junit测试方式 四.断言 1.为什么要使用断言 2.什么是断言(猜测) 3.常用AP ...
- IDEA Java Junit单元测试入门实战
IDEA Java Junit单元测试入门实战 1.下载jar包 2.在IDEA中添加jar包 3.创建单元测试代码 junit的使用: junit不是javase的一部分,想要使用需要导入jar包. ...
- Java中单元测试中:@BeforeClass,@Before,@Test,@After,@AfterClass中的问题详解
在Junit4中还有的测试注解有: @BeforeClass ,@Before,@Test,@After,@AfterClass 1.其中:@BeforeClass,@AfterClass是Juni ...
- java hadoop_单元测试Java Hadoop作业
java hadoop 在我以前的文章中,我展示了如何设置一个完整的基于Maven的项目,以用Java创建Hadoop作业. 当然并没有完成,因为它缺少单元测试部分. 在这篇文章中,我将展示如何将Ma ...
- java dao 单元测试_Spring Service、Dao进行Junit单元测试
pring对Controller.Service.Dao进行Junit单元测试总结 所有用Junit进行单元测试,都需要下面的配置 @RunWith(SpringJUnit4ClassRunner ...
- java控制单元测试_java – 当单元测试控制器时,模拟一个Spring Validator
在将单元测试postmortem编码到另一个项目创建的代码时,我遇到了如何使用initBinder模拟与控制器绑定的验证器的这个问题? 通常我会考虑确保我的输入是有效的,并且在验证器中进行一些额外的调 ...
最新文章
- 统计简单学_假说检定
- 常用英文搜索引擎及特点
- error 1309 mysql_MySQ登录提示ERROR 1045 (28000)错误如何解决
- dedecms织梦模板修改专题路径的方法
- 安徽大学计算机考研失败,回馈:2014年安徽大学计算机初试回忆题,我是雷锋,低调...
- java构造器调用构造器_java中构造器内部调用构造器实例详解
- c语言数组方式实现静态循环队列
- php markdown 文章目录,markdown 文本内跳转,生成目录
- SQLi LABS Less-8
- java环境变量配置验证_怎么验证Java环境变量配置成功
- 31个EMC标准电路分享
- 一个可以免费下载数据集的网站
- 5种方法,加密你的Python代码 !
- python代码编程教学无限循环_代码陷入无限循环
- 无线MODEM使用心得
- PG数据库按照30分钟时间片统计数据
- 【计算机科学】【2017】无组织三维点云的边缘检测
- Codeforces - Serval and Parenthesis Sequence
- 全球人工智能产业链产业图谱
- 前端面试之浏览器原理篇