这是东西:jUnit:动态测试生成

当您需要在许多不同的输入值或配置上运行同一组测试时,动态测试生成很有用。 可以使用参数化测试或使用理论来实现。

当您有大量数据用作参数并想对所有组合进行测试时,这些理论非常有用。 您得到的控制较少,但是您不必自己编写合并和迭代的代码。 关于理论如何工作的基础知识在Java代码极客 (最初出现在Java出现日历 )上进行了解释,因此,本文重点关注参数化测试。

当您需要对输入值进行良好控制时,例如,带有用作输入的文件的目录或有意义的参数组合列表,则参数化测试会更好。

参数化测试

参数化测试是一种测试用例,能够接受参数以及您希望其运行的所有参数组合的列表。 JUnit遍历参数列表,使用每个参数初始化测试用例,然后运行其所有测试方法。

然后,GUI和Maven运行程序都将每个参数化的测试运行解释为单独的测试。 如果其中一些失败,则立即清楚哪些失败了,有多少失败了。

示例用例

Less4j对于css编译器来说较少,因此其每个测试都由一个较少输入的文件和一个预期CSS文件定义。 编译器在输入文件上运行,并将其输出与预期CSS进行比较。 如果它们匹配,则测试通过。

所有.less文件都存储在目录中。 参数化的测试用例读取该目录,并为每个文件创建一个jUnit测试。 因此,我们可以通过创建新的.less和.css添加新测试,通过“全部运行”按钮运行测试,并在所有报告中查看新测试。

如何使用它

参数化的测试用例必须具有以下内容:

  • @RunWith(Parameterized.class)类注释,
  • 接受测试用例参数的构造函数,
  • 带有@Parameters注释的静态方法以生成参数,
  • 在构造函数中提供的参数上运行的测试方法。

建设者

参数化的构造函数必须至少具有一个参数。 例如,编译器测试用例可以将较少的输入作为第一个参数,而将预期的已编译css作为第二个参数。 第三个参数name将被忽略,稍后将进行说明:

@RunWith(Parameterized.class)
public class ParametrizedTest {public ParametrizedTest(String less, String expectedCss, String name) {this.less = less;this.expectedCss = expectedCss;}}

参量

生成参数的静态方法必须返回Iterable接口的实现。 迭代器返回包含参数集的数组。 每个数组用于创建一个测试用例实例,其中的对象用作构造函数参数。

例如,以下方法返回两个数组,从而导致两个测试用例实例:

@Parameters(name="Name: {2}")
public static Iterable<Object[]> generateParameters() {List<Object[]> result = new ArrayList<Object[]>();result.add(new Object[] {"less", "css", "pass"});result.add(new Object[] {"less", "error", "fail"});return result;
}

name注释参数是可选的。 其值将在GUI或maven报告中显示为测试用例名称。 {n}是第n个数组值的占位符。 它们从0开始索引,因此第一个测试用例将被命名为Name: pass ,第二个测试用例将被命名为Name: fail

测试方法

参数化的测试用例可以具有任意数量的测试,并且必须使用@Test批注进行批注:

@Test
public void testCss() { //dummy test methodString actualCss = compile(less);assertEquals(expectedCss, actualCss);
}@Test
public void testSourceMap() { //another test methodString actualCss = compile(less);assertEquals(expectedCss, actualCss);
}private String compile(String less) { //dummy compile methodreturn "css"; 
}

输出量

如果运行上面的测试类,则JUnit视图将显示以下结构:

[F] com.github.sommeri.jUnit4Examples.ParametrizedTest
[ ] |-- [Name: pass]
[ ] |---------------- testCss[Name: pass] 
[ ] |---------------- testSourceMap[Name: pass] 
[F] |-- [Name: fail]
[F] |---------------- testCss[Name: fail] 
[F] |---------------- testSourceMap[Name: fail]

完整的测试案例

@RunWith(Parameterized.class)
public class ParametrizedTest {private String less;private String expectedCss;public ParametrizedTest(String less, String expectedCss, String name) {this.less = less;this.expectedCss = expectedCss;}@Parameters(name="Name: {2}")public static Iterable<Object[]> generateParameters() {List<Object[]> result = new ArrayList<Object[]>();result.add(new Object[] {"less", "css", "pass"});result.add(new Object[] {"less", "error", "fail"});return result;}@Testpublic void testCss() {String actualCss = compile(less);assertEquals(expectedCss, actualCss);}@Testpublic void testSourceMap() {String actualCss = compile(less);assertEquals(expectedCss, actualCss);}//dummy compile methodprivate String compile(String less) {return "css"; }  
}

翻译自: https://www.javacodegeeks.com/2014/08/this-is-stuff-junit-dynamic-tests-generation.html

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

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

相关文章

js 变量提升与函数提升

规则&#xff1a; 函数的提升优先于变量提升。同名的函数会覆盖同名的函数与变量。同名的变量不会覆盖同名的函数。 示例代码1&#xff1a; <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><meta name"vi…

mockJs文档(一)

Mock.js 官网 目录 1. 开始安装 1.1 Node&#xff08;CommonJS&#xff09; 1.2 CMD方式 2. 语法规范 2.1 数据模板定义规范 DTD 2.1.1. 属性值是字符串 String 2.1.2. 属性值是数字 Number 2.1.3. 属性值是布尔型 Boolean 2.1.4. 属性值是对象 Object 2.1.5. 属性值…

【JOURNAL】《不思八九》 --和友腊八诗一首

不思八九旧岁新醅雪&#xff0c;腊八数九粥。红泥杜康曲&#xff0c;暖腹亦无忧。&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;http://t.sina.com.cn/n/博客顺风 腊八 辞岁逢新雪&#xff0c;好煮腊八粥。且将情入味&#xff0c;一并…

团队测试计划

我们是否需要测试&#xff0c;直到我们的软件是完美的&#xff1f; 首先针对第一个问题&#xff0c;我们一直觉得有必要&#xff0c;因为老师说过&#xff0c;只有多次测试才能真正检测出自己的代码是否完全没问题&#xff0c;所以我们进行了多次测试&#xff0c;虽然我对自己的…

ChoiceFormat:数字范围格式

ChoiceFormat类的Javadoc声明ChoiceFormat “允许您将格式附加到一定范围的数字上”&#xff0c;并且“通常在MessageFormat中用于处理复数”。 这篇文章描述了java.text.ChoiceFormat并提供了一些在Java代码中应用它的示例。 ChoiceFormat与java.text包中其他“ 格式 ”类之间…

vue sync用法

1、父组件 <add-rule :show.sync"showEditDialog" :addOrUpdate"addOrUpdate" close"showEditDialog false" :ruleData"editIfo" /> 2、子组件 // 这样可以// this.$emit(close)// 这样也可以this.$emit(update:show, false);…

小程序 获取手机号

【参考小程序开发文档&#xff1a;开发-指南-开放能力-用户信息-获取手机号】 地理位置 wx.getLocation(Object object) | 微信开放文档 手机号 获取手机号 | 微信开放文档 微信信息 小程序与小游戏获取用户信息接口调整&#xff0c;请开发者注意升级。 | 微信开放社区 目录…

Java 生成 32位 UUID

UUID&#xff1a;Universally Unique Identifier 通用唯一识别码 现在很多数据库的主键id&#xff0c;由原来的int自增&#xff0c;改为 UUID 表示。因为 UUID 本身不可能重复&#xff0c;线程安全&#xff0c;完美支持高并发。 示例代码如下&#xff1a; package com.miracle.…

使用Infinispan作为持久性解决方案

从https://vaadin.com/blog/-/blogs/using-infinispan-as-a-persistency-solution交叉发布。 感谢Fredrik和Matti的允许&#xff01; 各种RDBMS是持久性的实际标准。 建筑师认为使用它们是一个安全的选择&#xff0c;我敢说现在它们在很多地方都使用过。 为了解决这个问题&…

CSS布局之脱离文档流详解——浮动、绝对定位脱离文档流的区别

1、代码 &#xff08;1&#xff09;示例代码1 <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><meta http-e…

小程序 获取当前城市位置-高德地图

微信小程序 wx.getLocation 只能获取到经纬度&#xff0c;想要获取具体城市信息&#xff0c;需要使用地图插件。公司要求使用 高德地图&#xff0c;在使用上&#xff0c;几个地图的代码步骤都差不多。 目录 1. 查看官方文档 1.1 申请高德地图Key&#xff0c;点击查看申请key…

会议之于思考

从开始学习英语,我们几乎每天都要开会,讨论问题,确切的说是我们提出疑问,老师在给我们解答.这样高密集的开会,在提高班还是很少见到的 因为老师一个人带了很多学生,还有其他的工作要做.平时可是享受不到这样的待遇的.(其实我们的开会就是上课) 开的会多了,我就想到一个问题.为什…

摇篮善良:仅添加包装用于战争

我的同事Tom Wetjens 在Maven中撰写了博客文章仅打包依赖项 。 当我们想在WAR文件中包含依赖项时&#xff0c;他展示了一种Maven解决方案&#xff0c;而在其他任何作用域中都没有使用。 在这篇博客中&#xff0c;我们将看到我们如何在Gradle中解决这个问题。 假设我们在项目中…

网页端调用企业微信扫一扫 详细过程

效果展示&#xff08;需要使用微信内置浏览器打开&#xff09;&#xff1a; 目录 1. 快速集成H5开发应用 1.1 开始 1.2 创建应用 1.2.1 登录管理后台 1.2.2 添加自建应用 1.2.3 配置应用 1.2.4 获取应用的 AgentID 与 Secret 1.3 配置应用 1.3.1 配置应用主页 1.3.2 配置…

获取ip地址

代码 ///<summary>///取得客户端真实IP。如果有代理则取第一个非内网地址 ///</summary>publicstringIPAddress { get{ stringresult String.Empty; result HttpContext.Current.Request.ServerVariables["HTTP_X_FORWAR…

Oracle DBA 学习总结

对于学习Oracle 数据库&#xff0c;应该先要了解Oracle 的框架。它有物理结构&#xff08;由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成&#xff09; &#xff0c;逻辑结构&#xff08;表空间、段、区、块&#xff09;&#xff0c;内存分配&#xff…

lodash round

_.round(number, [precision0])根据 precision 四舍五入 number。 _.round(4.006);// > 4_.round(4.006, 2);// > 4.01_.round(4060, -2);// > 4100 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

可怕的DefaultAbstractHelperImpl

不久前&#xff0c;我们发布了这个有趣的游戏&#xff0c;我们称之为Spring API Bingo 。 当形成有意义的类名时&#xff0c;它是对Spring的巨大创造力的赞美和奉承。 FactoryAdvisorAdapterHandlerLoader ContainerPreTranslatorInfoDisposable BeanFactoryDe​​stination…

微信小程序 监听位置信息

wx.onLocationChange(function callback) | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.onLocationChange.html 小程序 获取当前城市位置-高德地图_Start2019-CSDN博客小程序获取位置信息&#xff0c;包括省市区、用户…

通过构建Cocoapods私有库进行组件化开发探索

专题一 一、创建私有索引库 选Github或者码云都可以&#xff0c;本例以Github为例。创建私有索引库用来作为自己组件库的索引&#xff1a; 二、本地添加私有索引库 添加&#xff1a;pod repo add 索引库名称 索引库地址 例&#xff1a;pod repo add ZYHModule https://github.c…