当前位置: 首页 > news >正文

帮别人做网站赚钱吗申请一个域名

帮别人做网站赚钱吗,申请一个域名,现在做网络推广好做吗,wordpress修改登录框字体我们已经对Java最普遍的测试框架的下一个版本了解很多。 现在让我们看一下JUnit 5扩展模型#xff0c;该模型将允许库和框架将自己的实现添加到JUnit中。 总览 设定 基本 建筑 扩展模型 条件 注射 … 在新兴的《 JUnit 5用户指南》中可以找到您将在此处阅读的更多内容… 我们已经对Java最普遍的测试框架的下一个版本了解很多。 现在让我们看一下JUnit 5扩展模型该模型将允许库和框架将自己的实现添加到JUnit中。 总览 设定 基本 建筑 扩展模型 条件 注射 … 在新兴的《 JUnit 5用户指南》中可以找到您将在此处阅读的更多内容以及更多内容。 请注意它基于Alpha版本因此可能会发生变化。 确实我们鼓励我们提出问题或提出请求以便JUnit 5可以进一步改进。 请利用这个机会 这是我们帮助JUnit帮助我们的机会因此如果您能在这里看到一些改善请确保将其上游 。 如有必要此帖子将得到更新。 我在这里显示的代码示例可以在GitHub上找到 。 JUnit 4扩展模型 首先让我们看一下JUnit 4是如何解决该问题的。 它具有两个部分竞争的扩展机制运行程序和规则。 跑步者 测试运行者管理测试的生命周期实例化调用设置和拆卸方法运行测试处理异常发送通知等。而JUnit 4提供了实现所有这些功能的实现。 在4.0中只有一种扩展JUnit的方法创建一个新的运行器并使用RunWithMyRunner.class注释测试类以便JUnit使用它而不是其自己的实现。 该机制非常繁重并且不方便扩展。 而且它有一个非常严格的限制每个测试班级只能有一位跑步者这使得他们无法组成。 因此无法同时利用Mockito和Spring跑步者的功能。 规则 为了克服这些限制JUnit 4.7引入了rules 它们是测试类的带注释字段。 JUnit 4将测试方法和其他操作包装到一条语句中并将其传递给规则。 然后他们可以在执行语句之前和之后执行一些代码。 此外测试方法通常在执行期间在规则实例上调用方法。 一个示例是临时文件夹规则 public static class HasTempFolder {Rulepublic TemporaryFolder folder new TemporaryFolder();Testpublic void testUsingTempFolder() throws IOException {File createdFile folder.newFile(myfile.txt);File createdFolder folder.newFolder(subfolder);// ...} } 由于使用Rule批注JUnit调用带有包装方法testUsingTempFolder的语句的文件夹 。 编写此特定规则是为了使文件夹创建一个临时文件夹执行测试然后再删除该文件夹。 然后测试本身可以在临时文件夹中创建文件和文件夹。 其他规则可能会在Swing的事件分发线程中运行测试 建立和删除数据库或者如果测试运行时间过长则让测试超时 。 规则是一个很大的改进但通常仅限于在测试运行之前和之后执行一些代码。 他们无法帮助无法在该框架内实现的扩展。 事态 JUnit有两种相互竞争的扩展机制每种都有其自身的局限性。 因此自JUnit 4.7起就有两种竞争的扩展机制每种机制都有其自身的局限性但也有很多重叠之处。 这使得干净扩展很困难。 此外编写不同的扩展可能会出现问题并且通常无法实现开发人员希望的那样。 由Tony Walmsley在CC-BY 2.0下发布 JUnit 5扩展模型 JUnit Lambda项目具有几个核心原则 其中之一是“优先于功能而不是扩展点”。 从字面上看这转化为新版本的整体机制–这不仅是扩展JUnit 5的唯一机制也是最重要的机制。 延伸点 JUnit 5扩展可以声明对测试生命周期的某些特定时刻感兴趣。 当JUnit 5引擎处理测试时它将逐步通过这些步骤并调用每个已注册的扩展。 从外观上看这些是扩展点 测试实例后处理 之前回调 有条件的测试执行 每次回调之前 参数解析 异常处理 AfterEach回调 毕竟回调 不必担心它们是否每个都还不清楚。我们稍后将介绍其中的一些。 每个扩展点对应一个接口。 他们的方法采用的参数可以捕获测试生命周期中特定点的上下文例如测试实例和方法测试名称参数注释等。 扩展可以实现任意数量的那些接口并且将由引擎使用相应的参数进行调用。 然后它可以执行实现其功能所需的任何操作。 要考虑的一个细节引擎在实例化扩展时以及实例保持存在的时间方面不做任何保证因此它们必须是无状态的。 他们需要维护的任何状态都必须写入JUnit并从中加载。 创建扩展后剩下要做的就是告诉JUnit。 这是那么容易因为添加ExtendWithMyExtension。 类 需要延长测试类或方法。 实际上存在一个稍微不那么冗长和更多显示的选项。 但是为此我们首先必须看看JUnit扩展模型的另一个Struts。 自定义注释 JUnit 5 API由注释驱动并且引擎在检查它们是否存在时会做一些额外的工作它不仅在类方法和参数上查找注释还在其他注释上查找。 并且它将发现的所有内容都视为立即存在于检查的元素上。 注释可以通过所谓的meta-annotations进行注释 很酷的是所有JUnit注释都是完全meta的。 这样就可以轻松地创建和编写在JUnit 5中完全可用的注释 /*** We define a custom annotation that:* - stands in for Test so that the method gets executed* - has the tag integration so we can filter by that,* e.g. when running tests from the command line*/ Target({ElementType.TYPE, ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Test Tag(integration) public interface IntegrationTest { } 然后我们可以像这样使用它 IntegrationTest void runsWithCustomAnnotation() {// this gets executed// even though IntegrationTest is not defined by JUnit } 或者我们可以为扩展创建更简洁的注释 Target({ ElementType.TYPE, ElementType.METHOD, ElementType.ANNOTATION_TYPE }) Retention(RetentionPolicy.RUNTIME) ExtendWith(ExternalDatabaseExtension.class) public interface Database { } 现在我们可以使用Database代替ExtendWithExternalDatabaseExtension。 类 。 并且由于我们添加了ElementType 。 ANNOTATION_TYPE到允许的目标列表中它也是一个元注释我们或其他人可以对其进行进一步的组合。 假设我们要对某些测试的运行时间进行基准测试。 首先我们创建要使用的注释 Target({ ElementType.TYPE, ElementType.METHOD, ElementType.ANNOTATION_TYPE }) Retention(RetentionPolicy.RUNTIME) ExtendWith(BenchmarkCondition.class) public interface Benchmark { } 它已经指向BenchmarkCondition 我们将在接下来实现。 这是我们的计划 衡量整个测试类的运行时间存储执行任何测试之前的时间 衡量各个测试方法的运行时间存储每次测试之前的时间 执行测试方法后检索测试的启动时间计算并打印结果运行时 执行完所有测试后检索类的启动时间计算并打印结果运行时 仅当用Benchmark注释类或方法时才执行任何此操作 最后一点可能不是立即显而易见的。 为什么扩展未处理未使用Benchmark注释的方法 这源于以下事实如果将扩展应用于类它将自动应用于其中的所有方法。 因此如果我们的要求表明我们可能希望对类进行基准测试但不一定要对所有单个方法进行基准测试则需要排除它们。 我们通过检查它们是否被单独注释来做到这一点。 碰巧的是前四个点直接对应于生命周期回调BeforeAll BeforeEach AfterEach AfterAll 因此我们要做的就是实现四个对应的接口。 这些实现非常简单它们只是按照我们上面所说的去做 public class BenchmarkCondition implementsBeforeAllExtensionPoint, BeforeEachExtensionPoint,AfterEachExtensionPoint, AfterAllExtensionPoint {private static final Namespace NAMESPACE Namespace.of(BenchmarkCondition);Overridepublic void beforeAll(ContainerExtensionContext context) {if (!shouldBeBenchmarked(context))return;writeCurrentTime(context, LaunchTimeKey.CLASS);}Overridepublic void beforeEach(TestExtensionContext context) {if (!shouldBeBenchmarked(context))return;writeCurrentTime(context, LaunchTimeKey.TEST);}Overridepublic void afterEach(TestExtensionContext context) {if (!shouldBeBenchmarked(context))return;long launchTime loadLaunchTime(context, LaunchTimeKey.TEST);long runtime currentTimeMillis() - launchTime;print(Test, context.getDisplayName(), runtime);}Overridepublic void afterAll(ContainerExtensionContext context) {if (!shouldBeBenchmarked(context))return;long launchTime loadLaunchTime(context, LaunchTimeKey.CLASS);long runtime currentTimeMillis() - launchTime;print(Test container, context.getDisplayName(), runtime);}private static boolean shouldBeBenchmarked(ExtensionContext context) {return context.getElement().isAnnotationPresent(Benchmark.class);}private static void writeCurrentTime(ExtensionContext context, LaunchTimeKey key) {context.getStore(NAMESPACE).put(key, currentTimeMillis());}private static long loadLaunchTime(ExtensionContext context, LaunchTimeKey key) {return (Long) context.getStore(NAMESPACE).remove(key);}private static void print(String unit, String displayName, long runtime) {System.out.printf(%s %s took %d ms.%n, unit, displayName, runtime);}private enum LaunchTimeKey {CLASS, TEST} } 有趣的细节是shouldBeBenchmarked 它使用JUnit的API毫不费力地确定当前元素是否使用Benchmark进行 元注释以及writeCurrentTime / loadLaunchTime 后者使用存储来写入和读取启动时间。 您可以在GitHub上找到代码 。 接下来的文章将讨论条件测试执行和参数注入并显示如何使用相应扩展点的示例。 如果您迫不及待请查看这篇文章 其中展示了如何将两个JUnit 4规则条件禁用和临时文件夹移植到JUnit 5。 摘要 我们已经看到JUnit 4的运行者和规则对于创建干净强大且可组合的扩展并不是理想的选择。 JUnit 5旨在通过更通用的扩展点概念来克服它们的局限性。 它们允许扩展程序指定要在测试生命周期中的哪些时间点进行干预。 我们还研究了元注释如何使自定义注释的创建变得容易。 你怎么看 翻译自: https://www.javacodegeeks.com/2016/04/junit-5-extension-model.html
http://www.pierceye.com/news/528712/

相关文章:

  • 做网站需要的技术做网站优化好的网络公司
  • 为什么要更新网站登录四川省住房和城乡建设厅官网
  • 注册网站不用手机短信验证的网站营销型网站的建设起步
  • 国内高清图片素材网站推荐元素领域wordpress
  • 沙朗做网站公司网页制作免费网站制作
  • 营销型网站重要特点是网站播放视频速度优化
  • 建设厅报名网站做PHP网站前端网站进不去
  • 网站开发后台 amp建网页还是网站
  • 云南个旧建设局网站宁波关键词优化品牌
  • 网站建设方案应急处置wordpress我爱水煮鱼
  • 网页设计模板html代码班级主题广东seo推广
  • 西安 网站托管西安网站关键词排名
  • 做网站用discuz还是wp汉狮做网站公司郑州
  • 网站运营服务中心建设方案网页免费制作网站
  • 做网站销售有前景怎么注销网站
  • 福州建设网站设计电子商务网站平台有哪些
  • 扁平化色块风格的网站企业网站建设客户需求调查问卷
  • 网站建设产品服务痘痘如何去除效果好
  • 展会电子商务网站如何建设单页网站如何做
  • 济南软件外包邢台seo服务公司
  • 网站建设2017主流代码语言垂直型电商网站如何做
  • 重庆 网站定制推广产品怎么发朋友圈
  • 网站建设公司初心经典企业网站欣赏
  • 本地网站开发公司网站建设 产品拍照
  • 军队营房基础建设网站wordpress 标签云集
  • 苏州建设建设信息网站如何给自己的店做小程序
  • 沈阳微营销网站制作厨师培训机构 厨师短期培训班
  • 个人备案用作资讯网站网站开发yuanmus
  • 大连网站建设 选领超科技网站建设实录音乐
  • 上海网站建设流wordpress关闭会员