CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

还在用main测试你的代码?Java开发-JUnit与软件测试简介(补档)-免费源码丞旭猿

前言

这篇文章原创于2021年5月左右,近日转移至博客。

本文最初创作日期在2021年5月左右

JUnit – 概述

什么是单元测试?

单元测试是一个对单一实体(类或方法)的测试。单元测试是每个软件公司提高产品质量、满足客户需求的重要环节。

单元测试可以由以下两种方式完成:

人工测试自动测试
手动执行测试用例并不借助任何工具的测试被称为人工测试。借助工具支持并且利用自动工具执行用例被称为自动测试。
– 消耗时间并单调:由于测试用例是由人力资源执行,所以非常缓慢并乏味。- 人力资源上投资巨大:由于测试用例需要人工执行,所以在人工测试上需要更多的试验员。 – 可信度较低:人工测试可信度较低是可能由于人工错误导致测试运行时不够精确。 – 非程式化:编写复杂并可以获取隐藏的信息的测试的话,这样的程序无法编写。– 快速自动化运行测试用例时明显比人力资源快。- 人力资源投资较少:测试用例由自动工具执行,所以在自动测试中需要较少的试验员。 – 可信度更高:自动化测试每次运行时精确地执行相同的操作。 – 程式化:试验员可以编写复杂的测试来显示隐藏信息。

什么是一个单元测试用例?

单元测试用例是一段代码可以确保另一端代码(方法)按预期工作的代码。为了迅速达到预期的结果,就需要测试框架。JUnit 是 java 编程语言理想的单元测试框架。

一个正式的编写好的单元测试用例的特点是:已知输入和预期输出,即在测试执行前就已知。已知输入需要测试的先决条件,预期输出需要测试后置条件。

每一项需求至少需要两个单元测试用例:一个正检验,一个负检验。如果一个需求有子需求,每一个子需求必须至少有正检验和负检验两个测试用例。

什么是JUnit,为什么是JUnit?

JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。

JUnit 促进了测试优先的理念,强调建立测试数据的一段代码,可以先测试,然后再应用。这个方法就好比测试一点,编码一点,测试一点,编码一点……,增加了程序员的产量和程序的稳定性,可以减少程序员的压力和花费在排错上的时间。

JUnit的特性

  • JUnit 是一个开放的资源框架,用于编写和运行测试。
  • 提供注释来识别测试方法。
  • 提供断言来测试预期结果。
  • 提供测试运行来运行测试。
  • JUnit 测试允许你编写代码更快,并能提高质量。
  • JUnit 优雅简洁。没那么复杂,花费时间较少。
  • JUnit 测试可以自动运行并且检查自身结果并提供即时反馈。所以也没有必要人工梳理测试结果的报告。
  • JUnit 测试可以被组织为测试套件,包含测试用例,甚至其他的测试套件。
  • JUnit 在一个条中显示进度。如果运行良好则是绿色;如果运行失败,则变成红色。

基本用法

下面,我们通过一个简单的例子,了解JUnit进行单元测试的基本方法。

创建一个Yahoo类

// Path: /src/yahooes/Yahoo.javapackageyahooes;publicclassYahoo{intx,y;Stringname;publicYahoo(Stringname){this.name=name;}publicStringgetName(){returnthis.name;}}

创建一个Test Case类

// Path: /src/yahooes/YahooTest.javapackageyahooes;import staticorg.junit.jupiter.api.Assertions.*;importjava.util.jar.Attributes.Name;importorg.junit.jupiter.api.Test;classYahooTest{Stringname="Bob";Yahooyahoo1=newYahoo("Bob");Yahooyahoo2=newYahoo("Jack");@TestvoidtestName(){assertEquals(name,yahoo1.getName());assertNotEquals(name,yahoo2.getName());}}

此时点击运行,就可以测试Yahoo类了。

软件测试

下面,我们正式来学习JUnit编写测试的方法。但在之前,我们先回顾一下软件构造课程中关于测试的知识点。毕竟JUnit只是工具,对软件测试的全面了解才是关键。

了解软件测试

虽然决定软件质量的是软件的设计而非软件测试,但它仍然是提高软件质量的重要手段。

软件测试的难点

不过软件测试并没有那么简单, 即使是最好的测试也无法证明系统不存在错误。原因如下:

  1. 暴力穷举不可取
  2. 偶然测试没意义
  3. 找不到统计规律

软件测试的目标

测试跟其它活动的目标相反,它需要破坏性地验证代码的错误性,越多越好,越早越好。

测试用例

测试用例

一组 { 输入+ (执行条件) + 期望结果 } 的集合

什么是好的测试用例

一个好的测试用例有以下4点品质:

  1. 最可能发现错误
  2. 不重复、不冗余
  3. 最有效
  4. 既不简单也不复杂

测试优先编程

过程

  1. 写规约、写符合规约的测试用例、(再改规约、写测试用例…)直到完善规约
  2. 写代码、执行测试、改代码、测试…直到通过测试

单元测试

分级测试

  1. 单元测试 – 在类中间进行测试,每个模块写一个测试。
  2. 集成测试 – 将不同开发者的多个模块集中测试。
  3. 系统测试 – 对整个系统进行测试,通常在软件开发的后期阶段进行。

单元测试

针对软件的最小单元模型开展测试,隔离各个模块,容易定位错误和调试。

在测试优先编程中,单元测试往往会视为编码过程的一部分。

单元测试的组成

  • Driver

类似于主程序,可以接受测试用例,传递数据给需要测试的模块,获取运行的结果并输出。

  • Stubs

代表模块进行测试的部分,比如由一个类模块创建出的对象。

黑盒测试

黑盒测试用于检查程序是否符合规约,追求用尽可能少的测试用例,尽快运行,尽可能发现程序的错误。

通过等价类划分和边界设计测试用例

将被测函数的输入域分为等价类,从每个等价类中选出一个测试用例即可。

  1. 输入数据限定了数值范围:分割
  2. 输入数据指明了特定的值:是或不是
  3. 输入数据确定了一组数值:其中之一或者不在其中
  4. 输入数据是Y/N: Y/N
  5. 输入的特殊情况: -1 0 1
  6. 输入的上下限及边界
  7. 考虑边界:合法输入内,边界和略微向内。合法输入外,略超出边界。
  8. 二维输入空间:一维等价类的笛卡尔积,覆盖每个区域最少一次即可。

白盒测试

​ 黑盒测试是测试人员写的,而白盒测试是开发人员写的。黑盒测试完全来自规约,不考虑内部实现,而白盒测试要考虑内部实现细节。

​ 白盒测试一般较早执行,它只能测试已经实现的功能是否正确,但无法保证是否符合用户的需求。

为白盒测试设计测试用例的原则

  1. 任何执行路径都要走
  2. 任何逻辑判定都要走,比如A&&B就是FF,FT,TF,TT。
  3. 循环路径测试1次即可。
  4. 测试效果:路径覆盖>分支覆盖> 语句覆盖。(条件覆盖和分支覆盖没有联系)
  5. 测试难度:路径覆盖>分支覆盖>语句覆盖。

为测试策略写文档

​ 测试策略(根据什么来选择测试用例)非常重要,需要在程序中显式记录下来。目的是在代码评审过程中,其他人可以理解你的测试,并评判你的测试是否足够充分。

文档化描述测试策略

  1. 如何划分输入的每个参数?
  2. (如果有)如何划分参数之间的关系?
  3. 为什么要这样划分?
  4. 每个测试用例标注它包括了哪个区域(笛卡尔积)。

END

声明:本文部分素材转载自互联网,如有侵权立即删除 。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容