单元测试编写

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;

// 定义前缀 整个测试类开始执行的地方

@BeforeAll

public static void init(){

}

// 定义后缀,整个测试类完成后执行的操作

@AfterAll

public static void cleanup(){

}

// 定义每个测试用例开始执行前的操作

@BeforeEach

public void create(){

this.demo = new Demo();

}

// 定义在每个测试用例完成后执行的操作

@AfterEach

public void destory(){

}

// 执行测试用例

@Test

@DisplayName("售票后的余额减少")

public void shouldReduceInventoryWhenticketSoldOut(){

}

@Test

public 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(){

}

}

添加相关的插件

maven-surefire-plugin

2.22.0

fast

slow

断言

使用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 中的单元测试的详细内容,更多关于Java 单元测试的资料请关注聚米学院其它相关文章!

java 中的单元测试_浅谈Java 中的单元测试相关推荐

  1. java布尔类型比较器_浅谈Java中几种常见的比较器的实现方法

    在java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题. 通常对象之间的比较可以从两个方面去看: 第一个方面:对象的地址是否一样,也就是是否引用自同一个对象.这种方式可以直接使用& ...

  2. java null什么意思_浅谈java中null是什么,以及使用中要注意的事项

    1.null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,例如: Integer i=null; Float f=null; String ...

  3. java 中的排序_浅谈java中常见的排序

    浅谈java中常见的排序 学过java的人都知道,排序这一部分初次接触感觉还是有点难以理解,很多地方也会用到.然而,在java中常见的排序方法:冒泡排序,选择排序,插入排序等等.下面就让我们一起揭开他 ...

  4. java定义byte数组_浅谈java的byte数组的不同写法

    (由于篇幅原因阐述的不够详细科学,不喜勿喷). 经常看到java中对byte数组的不同定义,粗略整理的一下: 一个字节(byte)=8位(bit),"byte数组"里面全部是&qu ...

  5. java 对象之间转换_浅谈java对象之间相互转化的多种方式

    浅谈java对象之间相互转化的多种方式,对象,属性,参数,赋值,不支持 浅谈java对象之间相互转化的多种方式 易采站长站,站长之家为您整理了浅谈java对象之间相互转化的多种方式的相关内容. 第一种 ...

  6. java编程double相乘_浅谈Java double 相乘的结果偏差小问题

    看下面的一段代码的运行结果: public class TestDouble { public static void main(String[] args) { double d =538.8; S ...

  7. python中怎么计数_浅谈python中统计计数的几种方法和Counter详解

    1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b ...

  8. python 中arange函数_浅谈Python中range与Numpy中arange的比较

    本文先比较range与arange的异同点,再详细介绍各自的用法,然后列举了几个简单的示例,最后对xrange进行了简单的说明. 1. range与arange的比较 (1)相同点:A.参数的可选性. ...

  9. python中rstrip用法_浅谈Python3中strip()、lstrip()、rstrip()用法详解

    简单来说,三种方法是为了删除字符串中不同位置的指定字符.其中,strip()用于去除字符串的首尾字符,同理,lstrip()用于去除左边的字符,rstrip()用于去除右边的字符 Python中有三个 ...

最新文章

  1. 【Python培训基础知识】单例模式
  2. git提交代码遇到fatal: unable to access
  3. ionic 完美仿微信摇一摇
  4. java array iterator_java数组遍历——iterator和for方法
  5. java怎么插入oracle数据库timenstamp,Sybase数据库技术,数据库恢复专家
  6. “美登杯”上海市高校大学生程序设计赛B. 小花梨的三角形(模拟,实现)
  7. 【CodeForces - 349B】Color the Fence (贪心,填数)
  8. Cannot resolve jakarta.validation:jakarta.validation-api:2.0.2
  9. Red Hat 6.5安装Oracle 10g故障汇总
  10. 百度中文依存句法分析工具DDParser重磅开源
  11. AUTOCAD——圆命令
  12. 入门知识(一)矢量图与位图的区别
  13. 播放全景视频【一】:用unity Video Player视频播放器来播放360全景视频
  14. 计算机网络换算方法,网络带宽换算
  15. 使用二维码——第三方库ZBar和libqrencode的使用
  16. dell笔记本插上耳机没有声音_笔记本扬声器没声音,但耳机有声音怎么办
  17. 一文搞懂H264量化原理以及计算过程
  18. 科技对金融业的告白信,有百融云创的落款
  19. layui中如何让多个控件在一行显示
  20. 程序员如何站着每年赚 30w 美金

热门文章

  1. IDEA : Git Pull Failed 解决(IDEA中使用stash功能)
  2. 机房收费系统总结【1】-整体流程
  3. train_test_split 数据集划分,样本划分
  4. LeetCode简单题之将找到的值乘以2
  5. Pass算子python 函数
  6. 嵌入式Linux设备驱动程序:发现硬件配置
  7. 2021年大数据Spark(二十六):SparkSQL数据处理分析
  8. Android AlertDialog设置宽度显示不正常的问题
  9. java字符串的知识总结
  10. redis缓存和cookie实现Session共享