junit 循环测试

最近,我遇到了一个问题,我不得不编写一种方法的测试,该方法需要计算在一定可能性范围内的随机分布值1 。 更准确地说,如果您假设签名看起来像

interface RandomRangeValueCalculator {long calculateRangeValue( long center, long radius );
}

测试可能会验证以下2个

public class RandomRangeValueCalculatorImplTest {@Testpublic void testCalculateRangeValue() {long center = [...];long radius = [...];RangeValueCalculator calculator = [...];long actual = calculator.calculateRangeValue( center, radius );assertTrue( center + radius >= actual );assertTrue( center - radius <= actual );}
}

但是,多次计算相同的中心和半径的范围值将返回不同的结果(至少在大多数情况下)。 因此,从某种意义上来说,解决方案在某种程度上是脆弱的,即实施不善可能会轻易导致间歇性故障。 另一方面,我不想深入到实际破坏值分配的深度。 后者(随机,高斯等)由协作者提供,并且其正确用法已通过其他测试确认。

在我看来,一种更为实用的解决方案可能是一次又一次地实际自动运行上述测试,以使其更加“有意义”。 当然,最简单的方法是将测试内容放入一个循环中并继续进行下去。

但是首先,将断言放在一个循环中并将两个方面混合到一个测试运行中似乎有些不对。 更为重要的是,涵盖的问题域需要进行更多种类的测试。 因此,出于减少冗余的意图,我记得关于JUnit-Rules的帖子,并实现了一个简单的重复规则3 。 有了这个规则,上面的测试可以轻轻地修改为:

public class RandomRangeValueCalculatorImplTest {@Rulepublic RepeatRule repeatRule = new RepeatRule();@Test@Repeat( times = 10000 )public void testCalculateRangeValue() {long center = [...];long radius = [...];RangeValueCalculator calculator = [...];long actual= calculator.calculateRangeValue( center, radius );assertTrue( center + radius >= actual );assertTrue( center - radius <= actual );}
}

我认为很容易理解testCalculateRangeValue方法在运行测试用例时将执行10000次。 以下代码片段显示了RepeatRule的实现,这很简单:

public class RepeatRule implements TestRule {@Retention( RetentionPolicy.RUNTIME )@Target( {java.lang.annotation.ElementType.METHOD} )public @interface Repeat {public abstract int times();}private static class RepeatStatement extends Statement {private final int times;private final Statement statement;private RepeatStatement( int times, Statement statement ) {this.times = times;this.statement = statement;}@Overridepublic void evaluate() throws Throwable {for( int i = 0; i < times; i++ ) {statement.evaluate();}}}@Overridepublic Statement apply(Statement statement, Description description ){Statement result = statement;Repeat repeat = description.getAnnotation( Repeat.class );if( repeat != null ) {int times = repeat.times();result = new RepeatStatement( times, statement );}return result;}
}

到目前为止,RepeatRule达到了目的,并且基于上述实现的系统功能正在发挥作用。 尽管如此,有时有人会为树木而错过森林,所以我认为分享此解决方案以了解其他人的想法可能是个好主意。

  1. 实际上,这只是问题领域的一部分,但我认为这是这篇文章的充分动机。 ↩
  2. Formalistically口语:F(N,M)∈{E |e≥nm∧e≤n+ M},对于所有的E,N,米ℕ∈ ↩
  3. 简短的google搜索只想出了Spring可用的类似解决方案,而我的库集中没有。 ↩
参考:来自Code Affine博客的JCG合作伙伴 Frank Appel 反复运行JUnit测试而没有循环 。

翻译自: https://www.javacodegeeks.com/2013/04/running-junit-tests-repeatedly-without-loops.html

junit 循环测试

junit 循环测试_重复运行JUnit测试而没有循环相关推荐

  1. 重复运行JUnit测试而没有循环

    最近,我遇到了一个问题,我不得不编写一种方法的测试,该方法需要计算在一定可能性范围内的随机分布值1 . 更准确地说,如果您假设签名看起来像 interface RandomRangeValueCalc ...

  2. 用java里的junit框架_使用Java JUnit框架里的@SuiteClasses注解管理测试用例

    使用Java JUnit框架里的@SuiteClasses注解管理测试用例 发布时间:2020-08-13 13:43:08 来源:ITPUB博客 阅读:96 作者:i042416 Suppose y ...

  3. junit数据驱动测试_使用Junit和Easytest进行数据驱动的测试

    junit数据驱动测试 在本文中,我们将看到如何使用Junit进行数据驱动的测试. 为此,我将使用一个名为EasyTest的库. 我们知道,对于TestNG,它已内置了数据提供程序. 通过简单的测试, ...

  4. junit测试起名字规则_如何在JUnit 5中替换规则

    junit测试起名字规则 最近发布的JUnit 5(又名JUnit Lambda) alpha发行版引起了我的兴趣,在浏览文档时,我注意到规则以及运行程序和类规则都消失了. 根据文档,这些部分竞争的概 ...

  5. ant接口自动化 junit_Jenkins + Ant自动运行Junit测试

    自动化测试脚本需要频繁执行,也可能需要定时执行,执行的方法可能有很多种,下面我们来讲讲怎么使用Jenkins+Ant的方式来执行用例. 一.使用工具 Jenkins Ant Junit 二.Ant T ...

  6. maven在idea中使用junit时,运行要测试的类,提示class not found。

    maven在idea中使用junit时,运行要测试的类,提示class not found.需要把.idea配置文件删了,然后重启,之后就可以了

  7. Maven运行JUnit测试(http://www.360doc.com/content/13/0927/15/7304817_317455642.shtml)

    Maven单元测试 分类: maven  2012-05-09 15:17  1986人阅读  评论(1)  收藏  举报 maven 测试 junit 单元测试 java random 目录(?)[ ...

  8. 使用Junit和Easytest进行数据驱动的测试

    在本文中,我们将看到如何使用Junit进行数据驱动的测试. 为此,我将使用一个名为EasyTest的库. 众所周知,对于TestNG,它已内置了数据提供程序. 通过简单的测试,我们可以使用Junit进 ...

  9. junit白盒测试 案例_JUnit通过失败测试案例

    junit白盒测试 案例 为什么要建立一种预期测试失败的机制? 有一段时间,人们会希望并期望JUnit @Test案例失败. 尽管这种情况很少见,但确实发生了. 我需要检测JUnit测试何时失败,然后 ...

最新文章

  1. 计算机等级考试计算机基础知识pdf,计算机基础知识与应用能力等级考试.pdf
  2. FFmpeg Filter基本使用
  3. 华为豪投20亿!3年培养100万AI人才,网友不服!
  4. 鸿蒙不是安卓也不是Linux
  5. JS格式化时间之后少了8个小时
  6. python if _name_==_main__如何理解Python中的if __name__ == ‘__main__’
  7. ESP8266之ESP8266WebServer库学习
  8. python rtf转txt_批量定时任务将rtf文件转为docx,入参是rtf文件夹,生成一个docx文件夹...
  9. python资本市场财务数据分析_不懂财务数据分析?教你一分钟看懂财务报表
  10. 神界计算机丢失msvcp120.dll,Win7系统msvcp120.dll丢失的解决方法
  11. CTF之misc-图片隐写
  12. js原生 阿拉伯数字转中文大写 (金额)
  13. sql计算用户留存率和时间留存率
  14. 阿里百度腾讯等34家企业获年度互联网经济大奖
  15. 共享充电步入“大三元”时代,三电一兽们吃得饱吗?
  16. FCPX插件:视频去闪烁插件DEFlicker安装教程
  17. (十八)树莓派3B+ wiringPi库的使用--外部中断
  18. html好看的预约界面设计,35个漂亮的网页弹框设计
  19. linux系统中病毒怎么解决,Linux 服务器中木马病毒及清除过程
  20. matplotlib绘制极坐标图

热门文章

  1. JavaScript学习总结(七)——JavaScript函数(function)
  2. 程序员如何面对 HR 面试的 40 个问题
  3. System.gc()调用 - 适用的场景
  4. jsp中使用cookie时报错……
  5. 新闻发布项目——实体类(comment)
  6. SpringAOP的Aspectj方式*
  7. 用数组模拟队列的实现
  8. Spring配置文件约束头
  9. 日志-周报-月报(2019年2月)
  10. python中seaborn画swarm图_Python可视化 | Seaborn5分钟入门(四)——stripplot和swarmplot