test-03-test case generate 测试用例生成 Randoop 介绍

拓展阅读

junit5 系列

基于 junit5 实现 junitperf 源码分析

Auto generate mock data for java test.(便于 Java 测试自动生成对象信息)

Junit performance rely on junit5 and jdk8+.(java 性能测试框架。性能测试。压测。测试报告生成。)

拓展阅读

自动生成测试用例

Randoop

Randoop是用于Java的单元测试生成器,它可以自动为你的类创建JUnit格式的单元测试。

Randoop手册详细说明了如何安装和运行Randoop。

Randoop的工作原理是通过反馈导向的随机测试生成。

这种技术会为被测试类伪随机但智能地生成一系列方法/构造函数调用序列。Randoop执行生成的序列,并利用执行结果创建捕获程序行为的断言。Randoop从代码序列和断言中创建测试用例。

Randoop可用于两个目的:发现程序中的错误以及创建回归测试,以在将来警告您更改程序行为。

Randoop将测试生成和测试执行相结合,形成一种高效的测试生成技术。Randoop甚至在广泛使用的库中发现了以前未知的错误,包括Sun和IBM的JDKs以及核心.NET组件。Randoop在工业界仍在使用,例如在ABB公司。

文档:

  • Randoop用户手册

对于Randoop的开发者/贡献者:

  • Randoop开发者手册
  • Randoop API文档
  • 项目创意页面(供贡献者/研究者使用)
  • 有关Randoop的科学论文

简介

编写测试是重要的,但也是困难且耗时的任务。Randoop可以自动生成Java类的单元测试。

Randoop在许多应用场景中取得了成功,特别是在库类(例如java.util)中。Randoop在ABB和Microsoft等公司以及开源项目中都得到了使用。

以下是Randoop生成的一个JUnit测试用例,该测试用例揭示了OpenJDK中的一个错误(手动添加了注释):

// 此测试表明JDK集合类可以创建一个与自身不相等的对象。
@Test
public static void test1() {LinkedList list = new LinkedList();Object o1 = new Object();list.addFirst(o1);// TreeSet是一个有序集合。根据API文档,此构造函数调用应该引发// ClassCastException,因为列表元素不可比较。但是构造函数却默默地(且问题地)接受了列表。TreeSet t1 = new TreeSet(list);Set s1 = Collections.synchronizedSet(t1);// 到这一步,我们成功地创建了一个违反相等性自反性的集合(s1):// 它与自身不相等!这个断言在OpenJDK上运行时失败。org.junit.Assert.assertEquals(s1, s1);
}

Randoop生成两种类型的测试:

  1. 发现错误的错误揭示测试,用于检测当前代码中的缺陷。
  2. 用于检测未来错误的回归测试。

Randoop的典型使用方式如下:

  1. 如果Randoop输出了任何发现错误的测试,首先修复底层的缺陷,然后重新运行Randoop,重复这个过程,直到Randoop不再输出发现错误的测试。

  2. 将回归测试添加到项目的测试套件中。

  3. 每当更改项目时运行回归测试。这些测试将通知您程序行为的更改。

  4. 如果有任何测试失败,将测试用例最小化,然后调查失败原因。

  5. 如果测试失败指示您引入了代码缺陷,请修复该缺陷。

  6. 如果测试失败指示测试过于脆弱或具体(例如,某个方法的输出值已更改,但新值与旧值一样可接受),则忽略该测试。

  7. 如果忽略了任何测试(或者如果添加了新代码需要测试),那么重新运行Randoop以生成新的回归测试套件,以替换旧的套件。

论文《Scaling up automated test generation: Automatically generating maintainable regression unit tests for programs》提供了有关如何在项目的整个生命周期内使用Randoop生成的测试的其他建议。

一个典型的程序员只会检查很少量的Randoop测试,仅当它们失败并且显示了缺陷或回归失败时,而且通常只会检查它们的最小化版本。

典型的程序员永远不会手动修改Randoop测试。

安装Randoop的步骤如下:

  1. Randoop支持Java 8、Java 11、Java 17或Java 19的JVM。

  2. 下载并解压文件 randoop-4.3.2.zip。本手册使用 ${RANDOOP_PATH} 表示解压后的存档路径,使用 ${RANDOOP_JAR} 表示在解压存档中 randoop-all-4.3.2.jar 的位置。

  3. 或者,如果您想查看或使用源代码,请按照Randoop开发者手册的“入门”部分的说明进行操作。

  4. 您可能希望加入 randoop-discuss@googlegroups.com 邮件列表,以便收到有关新发布的通知。

运行Randoop

可以通过调用其主类 randoop.main.Main 来实现:

java randoop.main.Main command args...

Randoop支持三个命令:

  1. gentests 生成单元测试。详细信息请参见生成测试。示例用法:

    java -Xmx3000m -classpath myclasspath:${RANDOOP_JAR} randoop.main.Main gentests --testclass=java.util.TreeSet --output-limit=100
    

    (但请注意,使用 --testclass 命令行参数仅指定一个被测试的类是非常不寻常的。)

  2. minimize 最小化失败的JUnit测试套件。详细信息请参见最小化失败的JUnit测试套件. 示例用法:

    java -cp ${RANDOOP_JAR} randoop.main.Main minimize --suitepath=ErrorTest0.java --suiteclasspath=myclasspath
    
  3. help 打印使用消息。详细信息请参见获取帮助。示例用法:

    java -classpath ${RANDOOP_JAR} randoop.main.Main help
    java -classpath ${RANDOOP_JAR} randoop.main.Main help gentests
    java -classpath ${RANDOOP_JAR} randoop.main.Main help minimize
    

    (在Windows上,调整classpath,例如使用分号而不是冒号作为分隔符。)

在这里插入图片描述

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

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

相关文章

13 | 使用代理ip爬取安居客房源信息

这是一个简单的Python爬虫代码,用于从安居客网站爬取房地产信息。该爬虫使用了代理IP来绕过可能的封禁,并提供了一些基本的信息抽取功能。 如果访问过多,那么可能出现了验证码 对此,最好的方法就是换ip。 使用代理IP的主要目的是保护爬虫的稳定性和隐私。以下是一些常见的原…

Macbook空间不足怎么解决?

随着使用时间的增长,我们会发现Mac电脑的存储空间越来越少,这时候我们就需要对Mac电脑进行清理,以释放更多的存储空间。那么,Mac空间不足怎么解决呢? 1.清理垃圾文件 Mac空间不足怎么解决?首先要做的就是清…

若依基于sm-crypto实现前后端登录密码加密

上一节介绍了基于jsencrypt实现的密码加密解密登录功能,这次来介绍基于sm-crypto实现前后端登录密码加密,本次采用的是sm2进行的加密解密。 后端 首先从后端代码开始写起(因为公钥和私钥都是要从java代码中生成): 首先需要引入sm-crypto的j…

vmware16安装centos9stream

此次下载的是centos9 stream ,使用vmware16。因为centos9stream版本比较新,所以vmware16无法识别此系统,不过无伤大雅。但是可能会导致兼容性问题,比如开机关机会很慢,建议还是用vmware17! 下载镜像文件&a…

投资自己,成就未来——社科院杜兰大学金融管理硕士项目

或许你一直在寻找一个能够提升自己、实现职业突破的机会。如果你对金融领域充满热情,并且渴望在这个竞争激烈的行业中脱颖而出,那么我要向你介绍一个绝佳的选择——中国社会科学院与美国杜兰大学金融管理硕士项目。 在这个高速发展的时代,投…

交通流量预测:T-GCN A Temporal Graph Convolutional Network for Traffic Prediction

摘要 为了同时捕捉时空相关性,将图卷积网络(GCN)和门控递归单元(GRU)相结合,提出了一种新的基于神经网络的流量预测方法–时态图卷积网络(T-GCN)模型。具体地,GCN用于学习复杂的拓扑结构以捕获空间相关性,而门控递归单元用于学习…

杨中科 EFCORE 第六部分 一对多关系配置

一对多关系配置 什么是实体间关系 1、所谓“关系数据库” 2、复习:数据库表之间的关系: 一对一、一对多、多对多。 3、EF Core不仅支持单实体操作,更支持多实体的关系操作。4、三部曲:实体类中关系属性;FluentAPI关系配置;使用关系操作。 一对多: 实体类 1、文章…

【Rust】get_local_info 0.2.4发布

发布0.2.4,修正0.2.3([我的Rust库更新]get_local_info 0.2.3-CSDN博客)中存在的峰值算法bug,现已提交力扣并通过,耗时0ms

基于JavaWeb+BS架构+SpringBoot+Vue健美操评分系统系统的设计和实现

基于JavaWebBS架构SpringBootVue健美操评分系统系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 目 录 1 绪 论 1 1.1背景与意义 1 1.2 国内外研究概况 1 1.3 研究的内容…

浅析企业微电网能效系统建设——安科瑞赵嘉敏

一 案例介绍 随着新型电力系统进程加快,新能源装机占比逐步提高,发电侧波动性、随机性导致可靠容量降低。加之极端天气带动负荷快速增长,造成电力供需紧张、电网尖峰负荷屡创新高,对现有能源供应带来巨大挑战。 国家电投五凌电力…

【数据结构 | 直接选择排序】

直接选择排序 基本思路直接插入排序SelectSort 基本思路 直接插入排序(StraightInsertionSort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。 我们可以同时从数组的头部和尾部同时进行排序工作…

UE4使用技巧

打开蓝图编辑器时不是打开一个新窗口,而是作为主窗口 适用于全部的打开新窗口的操作 蓝图编译时自动保存 开始游戏后立即捕获鼠标

Linux 内核被冬季风暴 “封印“

Linus Torvalds在内核邮件列表上宣布,由于他所在的美国俄勒冈州波特兰地区受到严重冬季风暴的影响,导致网络和电力中断。波特兰及其周边地区气温急降至零下 -10C,因此他不得不临时中断对Linux 6.8内核的合并窗口操作。 Linus于1月7日发布了Li…

PyTorch损失函数(二)

损失函数 5、nn.L1Loss nn.L1Loss是一个用于计算输入和目标之间差异的损失函数,它计算输入和目标之间的绝对值差异。 主要参数: reduction:计算模式,可以是none、sum或mean。 none:逐个元素计算损失,返…

MongoDB 启动提示错误code=killed, signal=ABRT

1.停止MongoDB sudo systemctl stop mongod 2.检查数据损坏 sudo mongod --repair --dbpath /var/lib/mongodb 3.赋权限 chown -R mongodb:mongodb /var/lib/mongodb chown mongodb:mongodb /tmp/mongodb-27017.sock 如果不赋权限,启动的时候则会提示 4.启动Mo…

静态路由添加404页面

静态路由添加404页面 引入404页面路由代码: {path: *,name: 404,component: () > import(/views/page404)}404页面样式

meter报OOM错误,如何解决?

根据在之前的压测过程碰到的问题,今天稍微总结总结,以后方便自己查找。 一、单台Mac进行压测时候,压测客户端Jmeter启动超过2000个线程,Jmeter报OOM错误,如何解决? 解答:单台Mac配置内存为8G&…

小红书青年文化洞察:新“旷野文学”兴起,用户回归人间清醒?

社交媒体的“议程设置”能够影响用户的关注焦点,乃至影响舆论风向,但是以UGC生态为主的小红书,受众手中的话语权影响力变大,用户能识别、参与,甚至抵抗议程设置。 用户越来越清醒,不再是“电视喂什么&…

MySQL的单表查询

单表查询的素材: 一、单表查询 素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 floa…

在linux环境下安装lnmp

lnmp官网:https://lnmp.org 一:lnmp安装 参考:https://lnmp.org/install.html 1:下载lnmp安装包 wget https://soft.lnmp.com/lnmp/lnmp2.0.tar.gz -O lnmp2.0.tar.gz 2:解压lnmp安装包 tar zxf lnmp2.0.tar.gz …