单元测试编写

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原则。单元测试,符合以下三个原则

  1. 自动化
  2. 独立性
  3. 可重复

单元测试覆盖率

语句覆盖

又称行覆盖(LineCoverage),段覆盖(SegmentCoverage),基本块覆盖(BasicBlockCoverage),这是最常用也是最常见的一种覆盖方式,就是度量被测代码中每个可执行语句是否被执行到了。

判定覆盖

又称分支覆盖(BranchCoverage),所有边界覆盖(All-EdgesCoverage),基本路径覆盖(BasicPathCoverage),判定路径覆盖(Decision-Decision-Path)。它度量程序中每一个判定的分支是否都被测试到了。

条件覆盖

它度量判定中的每个子表达式结果true和false是否被测试到了

路径覆盖

又称断言覆盖(PredicateCoverage)。它度量了是否函数的每一个分支都被执行了

微信公众号

Java 之单元测试相关推荐

  1. ABAP和Java的单元测试Unit Test

    ABAP ABAP class单元测试的执行入口,CLASS_SETUP, 是硬编码在单元测试框架实现CL_AUNIT_TEST_CLASS里的. 待执行的单元测试方法通过CL_AUNIT_TEST_ ...

  2. 聊聊 Java 的单元测试

    单元测试框架 Java​ 中,​JUnit ​和 ​TestNG ​是最受欢迎的单元测试框架. JUnit TestNG JUnit 首先是大名鼎鼎的 JUnit ,JUnit 已经成为 Java 应 ...

  3. 聊聊Java的单元测试

    单元测试框架 Java​ 中,​JUnit ​和 ​TestNG ​是最受欢迎的单元测试框架. JUnit TestNG JUnit 首先是大名鼎鼎的 JUnit ,JUnit 已经成为 Java 应 ...

  4. (60)Java基础 --单元测试

    目录 一.测试的概念 二.使用Junit4.x进行单元环境 1.环境搭建 2.使用步骤 3.常见注解 三.规范的Junit测试方式 四.断言 1.为什么要使用断言 2.什么是断言(猜测) 3.常用AP ...

  5. IDEA Java Junit单元测试入门实战

    IDEA Java Junit单元测试入门实战 1.下载jar包 2.在IDEA中添加jar包 3.创建单元测试代码 junit的使用: junit不是javase的一部分,想要使用需要导入jar包. ...

  6. Java中单元测试中:@BeforeClass,@Before,@Test,@After,@AfterClass中的问题详解

    在Junit4中还有的测试注解有:  @BeforeClass ,@Before,@Test,@After,@AfterClass 1.其中:@BeforeClass,@AfterClass是Juni ...

  7. java hadoop_单元测试Java Hadoop作业

    java hadoop 在我以前的文章中,我展示了如何设置一个完整的基于Maven的项目,以用Java创建Hadoop作业. 当然并没有完成,因为它缺少单元测试部分. 在这篇文章中,我将展示如何将Ma ...

  8. java dao 单元测试_Spring Service、Dao进行Junit单元测试

    pring对Controller.Service.Dao进行Junit单元测试总结 ​ 所有用Junit进行单元测试,都需要下面的配置 @RunWith(SpringJUnit4ClassRunner ...

  9. java控制单元测试_java – 当单元测试控制器时,模拟一个Spring Validator

    在将单元测试postmortem编码到另一个项目创建的代码时,我遇到了如何使用initBinder模拟与控制器绑定的验证器的这个问题? 通常我会考虑确保我的输入是有效的,并且在验证器中进行一些额外的调 ...

最新文章

  1. 统计简单学_假说检定
  2. 常用英文搜索引擎及特点
  3. error 1309 mysql_MySQ登录提示ERROR 1045 (28000)错误如何解决
  4. dedecms织梦模板修改专题路径的方法
  5. 安徽大学计算机考研失败,回馈:2014年安徽大学计算机初试回忆题,我是雷锋,低调...
  6. java构造器调用构造器_java中构造器内部调用构造器实例详解
  7. c语言数组方式实现静态循环队列
  8. php markdown 文章目录,markdown 文本内跳转,生成目录
  9. SQLi LABS Less-8
  10. java环境变量配置验证_怎么验证Java环境变量配置成功
  11. 31个EMC标准电路分享
  12. 一个可以免费下载数据集的网站
  13. 5种方法,加密你的Python代码 !
  14. python代码编程教学无限循环_代码陷入无限循环
  15. 无线MODEM使用心得
  16. PG数据库按照30分钟时间片统计数据
  17. 【计算机科学】【2017】无组织三维点云的边缘检测
  18. Codeforces - Serval and Parenthesis Sequence
  19. 全球人工智能产业链产业图谱
  20. 前端面试之浏览器原理篇

热门文章

  1. maven创建父项目和子项目
  2. ZStack常见问题
  3. Memcached内存管理机制浅析
  4. Struts知识问答
  5. powerDesigner生成excel版本的数据库文件
  6. 离子量子计算机 寻址,量子计算机的硬件进展
  7. linux学习第四周作业练习
  8. 记一次ZABBIX监控JMX故障
  9. Nginx服务架构初探(七):nginx邮件服务
  10. url、href、src