浅谈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;

 // 定义前缀 整个测试类开始执行的地方
 @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(){

 }
}

添加相关的插件

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

(0)

相关推荐

  • java编程之单元测试(Junit)实例分析(附实例源码)

    本文实例讲述了java编程之单元测试.分享给大家供大家参考,具体如下: 完整实例代码代码点击此处本站下载. 在有些时候,我们需要对我们自己编写的代码进行单元测试(好处是,减少后期维护的精力和费用),这是一些最基本的模块测试.当然,在进行单元测试的同时也必然得清楚我们测试的代码的内部逻辑实现,这样在测试的时候才能清楚地将我们希望代码逻辑实现得到的结果和测试实际得到的结果进行验证对比. 废话少说,上代码: 首先创建一个java工程,在工程中创建一个被单元测试的Student数据类,如下: packa

  • java单元测试JUnit框架原理与用法实例教程

    本文实例讲述了java单元测试JUnit框架原理与用法.分享给大家供大家参考,具体如下: 1 简介 JUnit是一个Java语言的单元测试框架,它由 Kent Beck 和 Erich Gamma 建立,逐渐成为 xUnit 家族中最为成功的一个. JUnit有它自己的JUnit扩展生态圈,多数Java的开发环境都已经集成了JUnit作为单元测试的工具.在这里,一个单元可以是一个方法.类.包或者子系统.因此,单元测试是指对代码中的最小可测试单元进行检查和验证,以便确保它们正常工作.例如,我们可以

  • 如何使用JaCoCo分析java单元测试覆盖率

    前言 随着敏捷开发的流行,编写单元测试已经成为业界共识.但如何来衡量单元测试的质量呢?有些管理者片面追求单元测试的数量,导致底下的开发人员投机取巧,编写出大量的重复测试,数量上去了,质量却依然原地踏步.相比单纯追求单元测试的数量,分析单元测试的代码覆盖率是一种更为可行的方式. JaCoCo(Java Code Coverage)就是一种分析单元测试覆盖率的工具,使用它运行单元测试后,可以给出代码中哪些部分被单元测试测到,哪些部分没有没测到,并且给出整个项目的单元测试覆盖情况百分比,看上去一目了然

  • Java Junit单元测试实例详解

    测试分类 黑盒测试: 不需要写代码, 给输入值, 看程序是否能够输出期望的值 白盒测试: 需要写代码, 关注程序具体的执行流程 Junit 是白盒测试的一种 1.定义一个测试类 (测试用例) 包名: xxx.xxx.test 测试类名: 被测试的类型 + Test 2.定义测试方法: 可以单独运行 方法名: test + 测试的方法名 返回值: void 参数列表: 空参 3.给方法加 @Test 注解 (需要导入 Junit 环境依赖) 4.判定结果: 红色: 失败, 绿色: 成功 一般使用断

  • 解决java junit单元测试@Test报错的问题

    在我们在myeclips里使用junit测试工具时有时会遇到错误,这是什么原因呢? 导致问题的原因通常有下面几个: (1)没有导入jar包 (2)导入jar包版本太低 (3)注意@Test要写在方法上面 如果不是几种问题,那便试试下面的解决方案: 1.在项目上点击右键,出现下图内容,选择properties 2.出现如下对话框,点击java build path,再选择add Library 3.之后如下图操作 4.选择junit4,点击finish,配置完毕. 以上这篇解决java junit

  • java实现连接mysql数据库单元测试查询数据的实例代码

    1.按照javaweb项目的要求逐步建立搭建起机构,具体的类包有:model .db.dao.test; 具体的架构详见下图: 2.根据搭建的项目架构新建数据库test和数据库表t_userinfo并且添加对应的测试数据; (这里我使用的是绿色版的数据库,具体的下载地址:http://pan.baidu.com/s/1mg88YAc) 具体的建立数据库操作详见下图: 3.编写包中的各种类代码,具体参考代码如下: UserInfo.java /** * FileName: UserInfo.jav

  • 详解Java单元测试之JUnit篇

    单元测试是编写测试代码,应该准确.快速地保证程序基本模块的正确性. JUnit是Java单元测试框架,已经在Eclipse中默认安装. JUnit4 JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before 在测试方法运行之前运行 @Test 测试方法 @After 在测试方法运行之后允许 @AfterClass 全局只会执行一次,而且是最后一个运行 @Ignore 忽略此方法 下面基于Eclipse介绍JUn

  • java程序员如何编写更好的单元测试的7个技巧

    测试是开发的一个非常重要的方面,可以在很大程度上决定一个应用程序的命运.良好的测试可以在早期捕获导致应用程序崩溃的问题,但较差的测试往往总是导致故障和停机. 虽然有三种主要类型的软件测试:单元测试,功能测试和集成测试,但是在这篇博文中,我们将讨论开发人员级单元测试.在我深入讲述具体细节之前,让我们先来回顾一下这三种测试的详细内容. 一.软件开发测试的类型 单元测试用于测试各个代码组件,并确保代码按照预期的方式工作.单元测试由开发人员编写和执行.大多数情况下,使用JUnit或TestNG之类的测试

  • Java mockito单元测试实现过程解析

    待测试的服务接口: public interface ItemService { String getItemNameUpperCase(String itemId); } 预览 待测试的服务的实现类: @Service public class ItemServiceImpl implements ItemService { @Resource private ItemRepository itemRepository; @Override public String getItemNameU

  • JAVA中单元测试的常用方式(小结)

    什么是单元测试 单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可测试部件.在过程化编程中,一个单元就是单个程序.函数.过程等:对于面向对象编程,最小单元就是方法,包括基类(超类).抽象类.或者派生类(子类)中的方法. 通常来说,程序员每修改一次程序就会进行最少一次单元测试,在编写程序的过程中前后很可能要进行多次单元测试,以证实程序达到软件规格书要求的工作目标,没有程序错误:虽然单元测试不是什么必须的

  • 深入学习Java单元测试(Junit+Mock+代码覆盖率)

    前言 单元测试是编写测试代码,用来检测特定的.明确的.细颗粒的功能.单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的. 单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复.改进或重构之后的正确性. 一般来说,单元测试任务包括 1.接口功能测试:用来保证接口功能的正确性. 2.局部数据结构测试(不常用):用来保证接口中的数据结构是正确的 1.比如变量有无初始值 2.变量是否溢出 3.边界条件测试 1.变量没有赋值(即为NULL) 2.变量是数值(或字符) 1.主要边界

随机推荐