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

news2024/11/17 15:44:56

拓展阅读

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.coloradmin.cn/o/1390444.html

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

相关文章

代码随想录算法训练营第21天 | 530.二叉搜索树的最小绝对差 + 501.二叉搜索树中的众数 + 236.二叉树的最近公共祖先

今日任务 530.二叉搜索树的最小绝对差 - Easy 501.二叉搜索树中的众数 - Easy 236.二叉树的最近公共祖先 - Medium 530.二叉搜索树的最小绝对差 - Easy 题目链接:力扣-530. 二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root ,返回 树中任意两…

车辆行驶控制运动学模型的matlab建模与仿真,仿真输出车辆动态行驶过程

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 基本假设 4.2 运动学方程 5.完整工程文件 1.课题概述 车辆行驶控制运动学模型的matlab建模与仿真,仿真输出车辆动态行驶过程. 2.系统仿真结果 3.核心程序与模型 版本:MATLAB2022a .…

DBeaver安装步骤

DBeaver 是一个基于 Java 开发,免费开源的通用数据库管理和开发工具,使用非常友好的 ASL 协议。可以通过官方网站或者 Github 进行下载。 由于 DBeaver 基于 Java 开发,可以运行在各种操作系统上,包括:Windows、Linux…

乐意购项目前端开发 #3

一、icon的使用 前往网站挑选要的图标 iconfont-阿里巴巴矢量图标库https://www.iconfont.cn/?spma313x.manage_type_myprojects.i3.2.2f173a81fQSVOU 创建项目添加图标 选择Font Class 下载到本地 解压后会看到这个页面 在asserts目录下创建iconfont目录,然后将最底下的6…

C# 图解教程 第5版 —— 第25章 反射和特性

文章目录 25.1 元数据和反射25.2 Type 类25.3 获取 Type 对象25.4 什么是特性25.5 应用特性25.6 预定义的保留特性25.6.1 Obsolete 特性25.6.2 Conditional 特性25.6.3 调用者信息特性25.6.4 DebuggerStepThrough 特性25.6.5 其他预定义特性 25.7 关于应用特性的更多内容25.7.1…

为什么自动测试要发现缺陷?

Q:为什么你做了那么多自动测试,却很少能发现缺陷? A:为什么自动化测试要发现缺陷? 在讨论问题时,首先要对问题是否存在达成一致,而不是直接跳到解决方案。 前一阵子,笔者在某个高端测试群里面丢了一个小…

day-11 统计整数数目

注:无思路 参考答案 code class Solution {static final int N 23;static final int M 401;static final int MOD 1000000007;int[][] d;String num;int min_sum;int max_sum;public int count(String num1, String num2, int min_sum, int max_sum) {d new in…

【STM32】HAL库的STOP低功耗模式UART串口唤醒,第一个接收字节出错的问题(已解决)

【STM32】HAL库的STOP低功耗模式UART串口唤醒,第一个接收字节出错的问题(已解决) 文章目录 BUG复现调试代码推测原因及改进方案尝试中断时钟供电外设唤醒方式校验码硬件问题 切换到STOP0模式尝试结论和猜想解决方案附录:Cortex-M…

《DAMA数据管理知识体系指南》05—第5章 数据建模和设计 知识点记录

第5章 数据建模和设计 5.1 引言 1.数据建模概要: 1)本章将描述数据模型的用途、数据建模中的基本概念和常用词汇以及数据建模的目标和原则。本章将使用一组与教育相关的数据作为案例来说明用各种数据建模的方法,并介绍它们之间的差异。 2&a…

day3:基于UDP模型的简单文件下载

思维导图 tftp文件下载客户端实现 #include <head.h> #define SER_PORT 69 #define SER_IP "192.168.125.223" int link_file() {int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}return sfd; } int filedownloa…

Vscode 上安装 Compilot

GitHub Copilot 是由 OpenAI 和 GitHub 开发的 AI 工具。其目的是通过自动完成代码来帮助开发人员使用集成开发环境 &#xff08;IDE&#xff09;&#xff0c;如 Visual Studio Code。它目前仅作为技术预览版提供&#xff0c;因此只有已在候补名单上被接受的用户才能访问它。对…

物联网智能控制器—福建蜂窝物联网科技有限公司

什么是物联网智能控制器&#xff1f; 物联网智能控制器是蜂窝物联自主研发的一种远程测控设备(RTU)&#xff0c;负责对现场信号、工业设备的监测和控制。本质上是一个模块化封装的微型计算机设备&#xff0c;将相应的一些功能进行了封装&#xff0c;无需进行电路设计和硬件程序…

图解渠道网关:不只是对接渠道的接口(一)

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;20&#xff09;篇。点击上方关注&#xff0c;深入了解支付系统的方方面面。 主要讲清楚什么是渠道&#xff0c;有哪些类型的渠道&#xff0c;什么是渠道网关&#xff0c;渠道网关在支付系统中定位、核心功能…

c++泛型算法相关笔记

一. 泛型算法 1. 前言 泛型算法&#xff1a;可以支持多种类型的算法 此处主要来讨论怎么使用标准库中定义的泛型算法<algorithm>, numeric, ranges. 在引入泛型算法之前&#xff0c;还有一种是方法的形式&#xff0c;比如说std::sort 和std::list::sort&#xff0c;前者…

Overmind平台推出Sui任务,帮助开发者学习Move并构建强大的应用程序

Overmind与Sui基金会合作&#xff0c;推出了其首个任务系列&#xff0c;旨在帮助开发者学习Move并开始在Sui上构建。这些任务通过提供赢取奖励的机会来将学习体验变成游戏&#xff0c;激励开发者构建高质量的代码并向Sui社区展示他们的技能。 去年推出的Overmind平台正在扩展到…

【C++】“Hello World!“

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Visual Studio 2022 ​ 2024.1.14 纪念一下自己编写的第一个C程序 #include<iostream>int main() {/*我的第一个C程序*/std::cout << "Hello world!:>" <<std::endl;ret…

基于python舆情分析可视化系统+情感分析+爬虫+机器学习(源码)✅

大数据毕业设计&#xff1a;Python招聘数据采集分析可视化系统✅ 毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&…

使用AI自动生成PPT提高制作效率

使用AI自动生成PPT提高制作效率 在制作PPT方面&#xff0c;很多制作者都会轻易跳进一个怪圈&#xff1a;“我要制作一个关于关爱老人的PPT&#xff0c;该怎么做呢&#xff0c;有模板没有?”这个会涉及很多逻辑需要经过不断的思考&#xff0c;制作PPT要通过很多素材、使用技巧、…

翼龙-2H无人机

一、概述 翼龙-2&#xff0c;是成都飞机工业集团研制的无人驾驶飞行器&#xff0c;是空中侦察、精确打击和应急通讯的平台。成都飞机工业集团于2015年9月的北京国际航空航天展览会上介绍了翼龙-2的概念。在2016年珠海航展期间&#xff0c;翼龙-2的原型机首次向公众展示。 因为…

【现代密码学】笔记4--消息认证码与抗碰撞哈希函数《introduction to modern cryphtography》

【现代密码学】笔记4--消息认证码与抗碰撞哈希函数《introduction to modern cryphtography》 写在最前面4 消息认证码与抗碰撞哈希函数MAC概念回顾&#xff08;是的&#xff0c;我忘记这些缩写是什么了。。&#xff09;MAC的定义适应性CMA&#xff08;Chosen Message Attack&a…