广东省建设工程总监扣分查询网站,电影网站盗链怎么做,站内搜索引擎,长沙五百强企业名单tl; dr#xff0c;您可以使用标签来阐明给定的测试时间样式。 什么时候给出#xff1f; 给定的时间#xff0c;然后是一种指定系统行为的常用样式#xff0c;其中您的测试分为三个部分。 给定的部分列出了测试的前提条件#xff0c;即在开始之前假设世界所处的任何状态。… tl; dr您可以使用标签来阐明给定的测试时间样式。 什么时候给出 给定的时间然后是一种指定系统行为的常用样式其中您的测试分为三个部分。 给定的部分列出了测试的前提条件即在开始之前假设世界所处的任何状态。 When子句执行要测试的动作。 然后Then语句检查后置条件是否成立。 通常以声明值或检查与模拟的交互的形式。 并非总是这种情况您需要在每个测试的代码中包含三个部分。 例如您的给定部分可能被通用的setUp方法覆盖。 我认为遵循模式并拆分不同的部分是一个好主意因为它使您可以从树木中清晰地看到木材。 在Junit中使用标签 在某些项目中我一直在尝试进一步扩展工作而不仅仅是将给定/何时/然后拆分并使用Java标签以便对测试的不同部分进行布局以使事情变得更加清晰* 。 以下代码段显示了如何使用Junit来实现。 Cafe cafe new Cafe();Testpublic void cafeShouldNeverServeCoffeeItDoesntHave() {Given:cafe.setCoffeesRemaining(1);When:cafe.serveCoffee();Then:assertFalse(cafe.canServeCoffee());} 这是一个非常简单的示例仅用于演示布局。 我们的测试检查了Cafe提供了从未提供过的咖啡。 标签清楚地划分了代码的三个部分。 看到这样使用标签是有点不寻常的-它们在Java中最常用是一种一次性突破嵌套循环的方法。 当然没有真正的理由不这样使用它们这只是一个样式问题带有标签和不带有标签的代码之间没有语义差异。 将标签与Lambda行为配合使用 我确定大多数Java开发人员都在使用Junit但我最近发布了一个名为Lambda Behave的新库。 它被设计为Java 8的现代测试和行为规范框架使编写流畅和易读的测试变得更加容易。 在lambda-behave中您通过列出描述性字符串而不是限制性方法名来编写测试并在lambda表达式中描述测试的主体。 我发现以这种风格编写的测试更容易阅读。 您可以在lambda-behave规范中使用相同的给定/何时/然后标签样式如以下代码示例所示 describe(a cafe, it - {Cafe cafe new Cafe();it.should(never serve coffee it doesnt have, expect - {Given:cafe.setCoffeesRemaining(1);When:cafe.serveCoffee();Then:expect.that(cafe.canServeCoffee()).is(false);});});局限性与替代方案 以这种方式使用标签的最大麻烦在于由于我不知道的原因您不能在Java中的变量声明语句之前编写标签。 这意味着如果要使用新变量启动Given:子句则需要将变量声明提升到块顶部或a字段中。 我还没有发现这是个大问题实际上吊装机可以进一步清理东西。 另一种可能也是更常见的方法是使用注释来表示给定/何时/然后子句。 我认为两者之间的选择主要是文体而非实质。 在这两种情况下您都只是编写一些说明性文字而不是像Cucumber和JBehave这样将功能烘焙到测试框架中。 我认为如果您已在团队中达成约定并且希望使这些标签比常规注释更突出则将标签用作单个注释的想法比较合适。 有些人在给定/何时/然后使用相似的替代模式但是具有更多阶段例如四阶段测试方法甚至使用不同的名称例如ArrangeActAssert 。 这些样式也可以使用基于标签或基于注释的约定。 结论 如果有人想在其IDE中进行外观或玩耍我会将示例代码放在github上 。 没有太多的代码因为它们只是非常简单的示例但是显示没有魔术可能会有所帮助 在本博客文章中我已经展示了如何使用标签来阐明代码块的意图希望这是人们发现有用和有用的一种技术。 无论您是否使用标签来实现给定时间我都希望人们遵循某种约定编写测试。 这确实使事情变得更加清晰。 我确定有人对此事有意见所以让我知道您认为这是个好主意吗 *我/认为/我在一次LJC活动上与他交谈后从Jose Llarena那里得到了这个主意所以谢谢Jose 翻译自: https://www.javacodegeeks.com/2015/01/given-when-then-in-java.html