Randoop随机测试自动生成测试用例

news2024/11/15 11:35:47

什么是Randoop:

Randoop是一个为JAVA单元测试生成测试用例的框架(生成器),它基于Junit格式为编译后JAVA字节码(classes)自动生成测试用例.

Randoop通过反馈式的随机测试来生成测试用例,由于测试数据的随机性,随机测试往往很难有较高的覆盖率。

Randoop地址:http://randoop.github.io/randoop/

使用Randoop准备:

下载Randoop的jar包,如randoop-2.1.4.jar

这篇文章不把Randoop加入到环境变量中,只是将.jar包放在和待处理类相同的位置(之后详细说明)。

作为随机测试,首先看看测试的输入集:

在Randoop中的测试数据有默认的原始值做为测试的输入

  • byte: -1, 01, 10, 100
  • short: -1, 01, 10, 100
  • int: -1, 01, 10, 100
  • long: -1, 01, 10, 100
  • float: -1, 01, 10, 100
  • double: -1, 01, 10, 100
  • char: ‘#’, ’ ', ‘4’, ‘a’
  • java.lang.String: “”, “hi!”

如图是实际生成的测试用例部分,我们可以看到生成的回归测试用例中大多数变量的值为随机的-1,0,1,10,100等


当然,这些值可以重新指定,方法有两个:

1.Command line: 通过命令行的“-literals-file”来指定数据来源的文件

2.编程方式:你可以声明一个类来存储原始值,使用 @TestValue来注释

package example;
  import randoop.*;

  public class TestValueExamples {

    @TestValue
    public static int i = 0;

    @TestValue
    public static boolean b = false;

    @TestValue
    public static byte by = 3;

    @TestValue
    public static char c = 'c';

    @TestValue
    public static long l = 3L;

    @TestValue
    public static float f = (float) 1.3;

    @TestValue
    public static double d = 1.4;

    @TestValue
    public static String s1 = null;

    @TestValue
    public static String s2 = "hi";

    @TestValue
    public static int[] a1 = new int[] { 1, 2, 3 };

  }

为了应用这个原始值,需要把这个类加入到待测试的类中,即在“-testclass="加这个类,当然建议把要测试的类写到.txt文件中然后通过“-classslist=YourFilename.txt"来加入多个待测试类。

说完了测试的输入,接下来看看Randoop的使用方法:

如果不依赖IDE,清楚在命令行中如何编译,运行java的,只需进入待测试类的文件夹下,并将randoop-2.1.4.jar放在这个目录下,输入以下命令,A是待测试类,即可成功

java -ea -classpath .;randoop-2.1.4.jar;A randoop.main.Main gentests --testclass=A --timelimit=60

如果不清楚的,以下为详细步骤:

1.首先在命令行中进入待测试的类目录下

项目文件结构


 2.进入Triangle目录下后,cd bin

bin内容

TriangleClass和testTriangle是包名,若类名为Triangle,则类全名是TriangleClass.Triangle

3.所以输入的命令为

java -ea -classpath .;randoop-2.1.4.jar;TriangleClass.Triangle randoop.main.Main gentests --testclass=TriangleClass.Triangle --timelimit=15

结果为

Randoop过程分析,进阶了解:

Randoop创建测试用例,然后将测试用例分为三类:

1.检测到你现有代码错误的测试用例

2.用来检测未来变更的回归测试用例

3.运行时无效和被丢弃的测试用例

那么我们就需要知道Randoop能检测出什么错误

目前,Randoop检测如下的协议(Contracts)来判断程序中是否有错

基于Object.equals()的协议

自反性:o.equals(o) == true

对称性:o1.equals(o2) == o2.equals(o1)

传递性:o1.equals(o2) && o2.equals(o3) ⇒ o1.equals(o3)

等于空: o.equals(null) == false

不抛出异常

基于Object.hashCode()的协议

Equals和hashCode的等价性: If o1.equals(o2)==true, then o1.hashCode() == o2.hashCode()

不抛出异常

基于Object.clone()的协议

不抛出异常

基于Object.toString()的协议

不抛出异常

基于 Comparable.compareTo() and Comparator.compare()的协议

自反性:o.compareTo(o) == 0

反-对称性:sgn(o1.compareTo(o2)) == -sgn(o2.compareTo(o1))

传递性:o1.compareTo(o2)>0 && o2.compareTo(o3)>0 ⇒ o1.compareTo(o3)>0

相等的可替代性: x.compareTo(y)==0 ⇒ sgn(x.compareTo(z)) == sgn(y.compareTo(z))

和Equal的一致性: (x.compareTo(y)==0) == x.equals(y) )

不抛出异常

基于checkRep() (用@checkRep注释的方法)

如果函数的返回类型为boolean行,则必须return True

不抛出异常

任何异常抛出都是错误(可以通过命令行参数修改)

知道了Randoop的协议,我们大概知道Randoop可以检测哪些类型的错误,可以推断出,Randoop适合检测的是自定义的数据类型类而不是纯功能类,所以Randoop能检测出Java.util的一些错误,而对于类似加减乘除的功能类则不是很有效,可以说基本无用。

最后不得不提的是,Randoop随机测试单纯使用时间作为标准来停止生成测试类不是很科学。

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


全套资料获取方式:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/638040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工程项目管理常用的软件有哪些?

工程项目管理常用的软件有哪些? 市面上的项目管理工具各种类型的都有,各自也有各自的优势和特点,但是“一千个人眼里有一千个哈姆雷特”,A企业觉得好用的项目管理工具不一定适合B企业。 一般来说,企业在进行系统工具…

蚁群优化算法

目录 蚁群优化 Quadratic Assignment Problem (QAP) 主要代码 create model Cost RouletteWheelSelection Plot 结果 蚁群优化 蚁群优化(ACO)是一套概率元启发法和智能优化算法,其灵感来源于蚂蚁的社会行为。ACO算法也被归类为群集智能…

电脑系统可以直接备份到其它硬盘上吗

在日常使用电脑的过程中,我们都希望能够保护好重要的系统数据,以防止意外数据丢失或系统崩溃。那么,能否将电脑系统直接备份到其他硬盘上呢?本文将为您解答这个问题,并探讨备份系统的方法和注意事项。 工具/原料&…

Kubernetes通过滚动更新deployment实现金丝雀发布

如果要使用 Deployment 向用户子集或服务器子集上线版本, 则可以遵循资源管理所描述的金丝雀模式, 创建多个 Deployment,每个版本一个。 所谓金丝雀发布(Canary Release),就是第一个新的 Pod 创建完成后立…

高考落榜,误打误撞学习了软件测试现在月薪30k成为了班上人人羡慕的对象

记得我刚高考结束时,并没有想象中的狂欢,反而是一种处于一种坐立不安的焦虑中,因为那时单纯地认为:这张试卷,将决定我的一生。对于将信仰寄托于高考的学生来说,当网页上高考成绩弹出的一瞬间,世…

数据在内存中的存储--浮点数

那么好了好了,宝子们,今天给大家介绍一下 “数据在内存中储存” 的来龙去脉---浮点数,来吧,开始整活!⛳️ 一、数据类型家族(浮点数) 家族成员:float,double&#xf…

通过 docker-compose 快速部署 Kafka 保姆级教程

一、概述 Kafka是由Apache基金会开发的分布式流处理平台,采用发布-订阅模式,支持高吞吐量、低延迟的数据传输。主要用于处理实时数据管道、数据存储和数据分析等大数据应用场景。Kafka采用高效的数据压缩算法,可以在集群中存储大量的数据&am…

相约未名湖畔,百度商业AI技术创新大赛携手北大学子共探AI发展

火热六月,百度商业AI技术创新大赛正在如火如荼的进行,百度商业与高校合作展开全国巡回宣讲会,吸引高校学子参与,激发创新思维,为科技发展注入源源不断的新生力量。6月6日,百度商业AI技术创新大赛走进北京大…

CSPM项目管理专业人员能力等级评价各级考试题目由什么构成?

2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…

智能存储柜的种类和特点分析

近年来随着网络技术的发展和人们对社会发展服务水平的需求不断提高,智能产品越来越普及,生活中也出现了越来越多的智能存储柜,应用于商场、超市、企业、工厂等场景,使用方便、保密性强、可靠性高。 智能存储柜种类非常多&#xff…

TIOBE 6月榜单出炉!AI影响到Python第一的位置?

TIOBE 6月榜单已经发布了,一起来看看这个月编程语言排行榜有什么变化吧! Python第一宝座岌岌可危 在过去的几年中,Python已经5次获得TIOBE指数年度奖项。由于数据科学和人工智能领域的推动,它越来越受欢迎。自 2021 年 10 月起&a…

大模型热潮来袭,AI基础软件深度赋能金融行业数智化升级

近日,由中国金融电子化集团有限公司、南京市建邺区人民政府主办的“2023 中国金融业数字化转型发展大会暨第十三届中国城市商业银行信息化发展创新座谈会”在南京盛大举办。九章云极DataCanvas公司副总裁周晓凌受邀出席会议,并发表“大模型时代的银行AI中…

前端必须掌握的HTML知识

前端开发者必须掌握的HTML知识包括: HTML基础语法:HTML标签、属性、值等基础语法。 HTML文档结构:HTML文档的基本结构,包括、、等标签的使用。 HTML元素:常用的HTML元素,如文本元素、图像元素、链接元素、…

【有奖调研】互联网新型社交,华为在找“元服务搭子”,快来集合!

“聊技术无话不谈,一起来吹吹元服务!畅聊你对元服务的想法,说不定,你就能撬动元服务的爆发增长!” 元服务(即原子化服务)是华为“轻量化”服务的新物种,可提供全新的服务和交互方式…

【C++】 STL(上)STL简述、STL容器

文章目录 简述STL容器list链表vector向量deque双端队列map映射表set集合hash_map哈希表 简述 STL是“Standard Template Library”的缩写,中文译为“标准模板库”。STL是C标准库的一部分,位与各个C的头文件中,即他并非以二进制代码的形式提供…

【Linux】解决Linux无法联网的一个小问题

今天使用在虚拟机VMware中使用Linux系统(Centos7)的时候,发现不能联网,找了很多办法也没有解决,甚至重新安装也没有解决,后来想起之前的解决方案。 要在任务管理器中打开,VMware的网络管理。

量子 金融,将改变游戏规则?

光子盒研究院 前言:如今,量子技术早已走出实验室、广泛赋能电力、化学、医学等各个领域;创新赛道上,加速奔跑的量子产业,将带来无限可能。现在,光子盒特开启「量子」专栏,一一解读量子技术将为下…

简易实现无缝切换自动轮播

原理 页面中设置一个父盒子 bannerBox,固定宽高,相当于一个窗口,超出部分隐藏bannerBox 内部设置一个图片盒子 imgBox,横向(或纵向)依次排列图片添加定时器,每隔一段时间,imgBox 向…

解决使用html标签自定义的按钮点击时有背景底色的问题

问题描述 如下图所示,点击按钮的瞬间,元素底部会出现一个背景色 解决方法 在点击产生背景色的元素的css样式上加上以下代码:-webkit-tap-highlight-color: transparent;

《Unix环境高级编程》/bin/sh: ./fixup.awk: Permission denied

我的代码是从http://www.apuebook.com/code3e.html下载的,先是在 使用cat /etc/redhat-release看到操作系统是CentOS Linux 7.6,使用uname -r看到内核是3.10.0-957.el7.x86_64。 在代码顶级目录下,执行make。 发现报错: ./fi…