junit 循环测试_重复运行JUnit测试而没有循环

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 循环测试

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

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

相关文章

Java 9:欢迎来到Module World

Java 9已于9月21日正式发布&#xff0c;Eclipse从Eclipse Oxygen.1a&#xff08;4.7.1a&#xff09;支持Java 9&#xff0c;让我们进入模块世界。 从此处下载Java 9&#xff0c;然后将其添加到Eclipse Installed JRE中&#xff0c;如下所示 就是这样&#xff0c;我们很高兴在…

重温5 UI开发

public class TextView extends View implements ViewTreeObserver.OnPreDrawListenerjava.lang.Object ↳android.view.View ↳android.widget.TextView Known Direct Subclasses Button,CheckedTextView,Chronometer,DigitalClock,EditText,TextClockButtonRepresents a…

JWT令牌的秘密轮换

当您使用JSON Web令牌 &#xff08; JWT &#xff09;或需要对有效载荷信息进行签名或加密的任何其他令牌技术时&#xff0c;设置令牌的到期日期很重要&#xff0c;因此&#xff0c;如果令牌到期&#xff0c;则可以假定这可能被视为安全漏洞&#xff0c;您拒绝使用此令牌进行任…

重温6 ListView相关|单位dp/sp

dp:密度无关像素。 sp&#xff1a;可伸缩像素。解决文字大小适配问题。 密度&#xff1a;Android中的密度即屏幕每英寸所包含的像素数&#xff0c;通常以dpi为单位&#xff0c;例如一个宽2英寸长3英寸手机屏幕&#xff0c;若分辨率为320*480&#xff0c;则屏幕密度为320dpi。…

重温7 布局相关

1、LinearLayout 可以在控件中使用&#xff1a; android:layout_weight"1" android:layout_width"0dp"设置控件占屏幕宽度&#xff0c;上表示占屏幕1/2。 2、TableLayout <TableLayout android:stretchColums"1" ...>上指定为1表示拉伸第…

wso2 esb_通过运行示例从WSO2 ESB开始

wso2 esb我最近加入了一个新任务&#xff0c;我们必须基于WSO2工具栈实施ESB解决方案。 尽管我熟悉ESB的大多数概念以及其他一些实现&#xff08;例如Mule ESB &#xff09;&#xff0c;但这是我第一次必须使用WSO2 ESB 。 幸运的是&#xff0c;有很多文档可以找到&#xff0c;…

Java SE中的Bootstrap CDI 2.0

抽象 这是在Java SE应用程序中引导CDI 2.0的快速参考。 CDI 2.0&#xff08;JSR 365&#xff09; Maven依赖 <dependency><groupId>org.jboss.weld.se</groupId><artifactId>weld-se-core</artifactId><version>3.0.2.Final</version…

持久化技术SharedPreferences存储

public interface SharedPreferences android.content.SharedPreferences Class Overview Interface for accessing and modifying preference data returned by getSharedPreferences(String, int). 1、调用SharedPreferences对象的edit()方法获得SharedPreferences.Editor对象…

Handler、Message的简单使用

Android没有全局的消息队列&#xff0c;Android的消息队列是和某个线程相关联在一起的。每个线程最多只有一个消息队列&#xff0c;消息的处理也是在这个线程中完成。也就是说&#xff0c;如果想在当前线程中使用消息模型&#xff0c;则必须构建一个消息队列&#xff0c;消息机…

我们相信加密! 教程

许多人认为加密是一个复杂的主题&#xff0c;这很难理解。 虽然可以实现它的某些方面&#xff0c;但是每个人都可以理解它在更高层次上的工作方式。 这就是我要处理的这篇文章。 用简单的术语解释它是如何工作的&#xff0c;然后使用一些代码。 是的&#xff0c;我们信任加密…

使用Http协议访问网络--HttpURLConnection

public abstract classHttpURLConnection extends URLConnectionjava.lang.Object ↳java.net.URLConnection ↳java.net.HttpURLConnection 1、获取HttpURLConnection实例Protected ConstructorsHttpURLConnection(URL url)Constructs a new HttpURLConnection instance …

Spring Cloud –基本设置

Spring Cloud解决了分布式系统的常见问题。 但是&#xff0c;对于只使用广为人知的整体应用程序工作的人来说&#xff0c;从一开始就跳入一长串为分布式服务设计的模式可能会让人不知所措。 本文将通过实用的方法为您介绍Spring Cloud的基础知识。 完成后&#xff0c;您不仅应该…

Eclipse中的Tomcat:6个流行的“如何做”问题

学习新技术总是一个艰难的过程。 当您尝试学习将要相互交互的两种技术时&#xff0c;此过程变得更加困难。 Tomcat和Eclipse是Java EE开发中最流行的先决条件之一。 因此&#xff0c;要成为一名专业的开发人员&#xff0c;您需要知道如何使用此对执行最需要的操作以及如何进行一…

Spring Boot中带有CKEditor的AJAX

1.概述 在本文中&#xff0c;我们将介绍如何在Spring Boot中使用CKEditor 。 在本教程中&#xff0c;我们将导入一个包含大量数据的XML文档&#xff0c;对使用GET请求将一组数据加载到CKEditor实例的能力进行编程&#xff0c;并执行POST请求以保存CKEditor的数据。 我们将使用…

使用Http协议访问网络--HttpClient

public interface HttpClient org.apache.http.client.HttpClient HttpClient是Apache提供的Http网络访问接口。1、创建HttpClient实例HttpClient是一个接口&#xff0c;无法直接创建实例&#xff0c;通常创建一个DefaultHttpClient&#xff08;HttpClient 的SubClass&#xff…

编写测试用例

1、创建测试用例 为ComeOnBroadcastReceiverDo创建一个测试用例&#xff1a; 在导航栏File-->New-->Other 选择AndroidTestProject 2、点击next输入测试工程的name&#xff0c;选择测试工程路径 点击next,选择要测试的工程&#xff1a; 点击Finish完成测试工程的新建 被…

欢迎界面动画

实现一个欢迎界面的动画&#xff0c;即打开app显示的页面&#xff0c;动画结束后跳到Activity。 1、欢迎界面的背景是一个绿色矩形 <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/andr…

动画机制与使用

Android3.0之前有两种动画&#xff0c;一种方式是补间动画 Tween Animation、另一种叫逐帧动画 Frame Animation&#xff08;也称Drawable Animation &#xff09;Android3.0以后增加了属性动画 Property Animation。Tween Animation、Frame Animation只能用于View&#xff0c;…

1、HTTP--Web's foundation

1、1 HTTP(HyperText Transfer Protocol)超文本传输协议----Internet的多媒体信使 1、2 Web客户端和服务器 Web内容都是存储在Web服务器上的&#xff0c;Web服务器使用的是HTTP协议&#xff0c;因此常被成为HTTP服务器。HTTP服务器和HTTP客户端共同构成World Wide Web的基本组…