java 线程什么时候出栈_在Java中给出的时间

java 线程什么时候出栈

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 doesn't have", expect -> {Given:cafe.setCoffeesRemaining(1);When:cafe.serveCoffee();Then:expect.that(cafe.canServeCoffee()).is(false);});});

局限性与替代方案

以这种方式使用标签的最大麻烦在于,由于我不知道的原因,您不能在Java中的变量声明语句之前编写标签。 这意味着,如果要使用新变量启动Given:子句,则需要将变量声明提升到块顶部或a字段中。 我还没有发现这是个大问题,实际上吊装机可以进一步清理东西。

另一种可能也是更常见的方法是使用注释来表示给定/何时/然后子句。 我认为两者之间的选择主要是文体而非实质。 在这两种情况下,您都只是编写一些说明性文字,而不是像Cucumber和JBehave一样将功能烘焙到测试框架中。 我认为,如果您已在团队中达成约定,并且希望使这些标签比常规注释更突出,则将标签用作单个注释的想法比较合适。

有些人在给定/何时/然后使用相似的替代模式,但是具有更多阶段,例如四阶段测试方法,甚至使用不同的名称,例如Arrange,Act,Assert 。 这些样式也可以使用基于标签或基于注释的约定。

结论

如果有人想在其IDE中进行外观或玩耍,我会将示例代码放在github上 。 没有太多的代码,因为它们只是非常简单的示例,但是显示没有魔术可能会有所帮助!

在本博客文章中,我已经展示了如何使用标签来阐明代码块的意图,希望这是人们发现有用和有用的一种技术。 无论您是否使用标签来实现给定时间,我都希望人们遵循某种约定编写测试。 这确实使事情变得更加清晰。 我敢肯定有人对此事有意见,所以让我知道您认为这是个好主意吗?

*我/认为/我在一次LJC活动上与他交谈后从Jose Llarena得到了这个主意,所以谢谢Jose!

翻译自: https://www.javacodegeeks.com/2015/01/given-when-then-in-java.html

java 线程什么时候出栈

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

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

相关文章

java 2_Java(二)

二维数组是由一维数组组成的数组选择排序原理将数组中每一个元素与第一个元素相比较,如果这个元素小于第一个元素,则交换这两个元素循环第一条规则,找出最小元素,放于第一个位置经过n-1轮比较完成排序冒泡排序原理逐一比较数组中相…

continue语句只用于循环语句中,它的作用是什么?

continue语句只用于循环语句中,它的作用是:跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在while、for循环中,常与if条件语句一起使用,判断条件是否成立。continue语句只用在while、for循环中,它的作…

成为java高手_我如何想成为Java

成为java高手我喜欢Java。 我喜欢用Java编程。 但是在使用Python一段时间后,我希望对其进行一些更改。 它几乎纯粹是语法上的,因此可能有更好的JVM语言,但是我并不真正感兴趣,因为我仍然需要使用普通的Java来工作。 我意识到这些更…

在c语言中引用数组元素时,其数组下标的数据类型允许是什么

在c语言中引用数组元素时,其数组下标的数据类型允许是:整型常量或整型表达式。C语言规定只能逐个引用数组元素而不能一次引用整个数组,数据元素的表示形式为“数组名[下标]”,下标可以是整型常量或整型表达式。数组中只有一维数组…

在c语言中char型数据在内存中的储存形式为什么

在c语言中char型数据在内存中的储存形式为“ASCII码”。在C语言中,将一个字符常量放到一个字符变量中,实际并不是把该字符本身放到内存单元中,而是将与该字符相对应的ASCII码放到存储单元中。c语言 char型字符型数据类型就是字符1、字符数据的…

集合相减算法java_集算器协助java处理结构化文本的集合运算

有两个小文件:f1.txt和f2.txt,第一行是列名,现在需要对文件中的Name字段进行交集运算。部分数据如下:文件f1.txt:文件f2.txt:集算器代码:A1、B1:用import函数将文件读[A1.(Name),B1.(Name)].isect()入内存&…

netbeans插件_如何编写NetBeans插件

netbeans插件是否想在NetBeans IDE中添加功能或自动执行某些操作? 跟随我们编写您的第一个NetBeans插件。 让我们超越简单的工具栏示例 ,创建一个可以自动更新的插件。 该代码基于NetBeans的WakaTime插件 。 我们的示例插件将仅打印Hello World语句&…

c语言程序从哪里开始执行

c语言程序的执行总是起始于main函数。在一个C语言源程序中,无论main函数书写在程序的前部,还是后部,程序的执行总是从main函数开始,并且在main函数中结束。但需要注意的是,也是有特殊情况的,若是代码中出现…

基于价值链的流程框架分类_基于价值的类

基于价值链的流程框架分类在Java 8中,某些类在Javadoc中有一个小注释,说明它们是基于值的类 。 其中包括简短说明的链接,以及有关不使用它们的限制。 这很容易被忽略,如果这样做,则可能会在将来的Java版本中以微妙的方…

java json 易用_Java中 Json的使用

Java JSON本章节我们将为大家介绍如何在 Java 语言中使用 JSON。类库选择Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。下面是几个常用的 JSON 解析类库。Gson:谷歌开发的 JSON 库,功能十分全面。FastJson:阿里巴巴开发的 JSON 库&#…

C语言中数组所占字节怎么算

数组在内存中所占字节数可以使用sizeof操作符来计算,该操作符是专门用于检测类型或变量或数组在内存中所占有的空间(字节数);语法“sizeof(x)”,其中x是类型名、变量名或数组名等,可以返回x所占字节数。C语…

java伪装反序列化字节流_java对象序列化流和反序列化流

首先创建一个学生类import java.io.Serializable;public class Student implements Serializable {private static final long serialVersionUID 42L;private String name;//private int age;private transient int age;public Student() {}public Student(String name, int a…

sap界面功能_功能介面

sap界面功能目录 1.简介 2.理由 3. Lambda表达式 4.谓词<T> 5. BiPredicate <T&#xff0c;U> 6.函数<T&#xff0c;R> 7. BiFunction <T&#xff0c;U&#xff0c;R> 8.消费者<T> 9. BiConsumer <T&#xff0c;U> 10.供应商<T> 11.…

c 中头文件和源文件的区别是什么

区别&#xff1a;头文件是“.h”文件&#xff0c;提供接口&#xff1b;源文件是“.cpp”文件&#xff0c;提供实现。编译器规定源文件必须包含函数入口&#xff0c;即main函数&#xff1b;而头文件不得包含函数入口&#xff0c;头文件不可以单独编译成一个程序&#xff0c;仅仅…

rest api_REST API的演变

rest api每个开发人员都以某种方式接触到API 。 要么为一家大公司集成一个主要系统&#xff0c;或者使用最新的图形库生成一些精美的图表&#xff0c;要么直接与他喜欢的编程语言进行交互。 事实是&#xff0c;API无处不在&#xff01; 它们实际上代表了当今Internet的基本构建…

在c程序中,注释语句只能位于一条语句的后面吗

C语言中的注释在编写C语言源代码时&#xff0c;应该多使用注释&#xff0c;这样有助于对代码的理解。在C语言中有两种注释方式&#xff1a;一种是以/*开始、以*/结束的块注释&#xff08;block comment&#xff09;&#xff1b;另一种是以//开始、以换行符结束的单行注释&#…

java中的wn是什么意思_wnJava--做简捷的互动社区网站

13年3月份开始策划开发的个人作品&#xff0c;一直都是一个人开发&#xff0c;虽然自觉还有许多功能需要完善&#xff0c;冒着被各位大牛们批判的风险共享下源码&#xff0c;在看了网站之后感兴趣的可以自行下载啊。代码运行于tomcat容器&#xff0c;jsp-servlet架构 使用sprin…

C 运算符中不能重载的是哪些

C 运算符中不能重载的有&#xff1a;1、条件运算符“?:”&#xff1b;2、成员访问运算符“.”&#xff1b;3、域运算符“::”&#xff1b;4、长度运算符“sizeof”&#xff1b;5、成员指针访问运算符“->*”和“.*” 。重载&#xff1a;让操作符可以有新的语义&#xff0c;…

jdbc pdf_JDBC教程– ULTIMATE指南(PDF下载)

jdbc pdf在本文中&#xff0c;我们提供了全面的JDBC教程&#xff08;Java数据库连接性&#xff09;&#xff0c;这是Oracle提供的API&#xff0c;允许程序员处理Java应用程序中的不同数据库&#xff1a;它允许开发人员建立与数据库的连接&#xff0c;定义特定客户端如何访问给定…

C语言字符串输出函数puts()的作用是什么

C语言字符串输出函数puts()的作用&#xff1a;puts()在显示字符串时会自动在其末尾添加一个换行符。puts()遇到空字符时就停止输出&#xff0c;所以必须确保有空字符。  下面两个示例分别说明puts()的两个特点。  示例1&#xff1a;/* put_out.c -- using puts() */#includ…