spock_在扩展Spock时输出给定值

spock

Spock是一个Java测试框架,由GradleWare的软件工程师Peter Niederwieser于2008年创建,它可以促进BDD的发展。 利用这个
例如 ,一个故事可以定义为:

Story: Returns go to stockAs a store owner
In order to keep track of stock
I want to add items back to stock when they're returned.Scenario 1: Refunded items should be returned to stock
Given that a customer previously bought a black sweater from me
And I have three black sweaters in stock.
When he returns the black sweater for a refund
Then I should have four black sweaters in stock.Scenario 2: Replaced items should be returned to stock
Given that a customer previously bought a blue garment from me
And I have two blue garments in stock
And three black garments in stock.
When he returns the blue garment for a replacement in black
Then I should have three blue garments in stock
And three black garments in stock.

使用Spock,可以使用给定的相同时间, 格式将测试非常紧密地映射到方案规范。 在Spock中,我们可以将第一种情况实现为:

class SampleSpec extends Specification{def "Scenario 1: Refunded items should be returned to stock"() {given: "that a customer previously bought a black sweater from me"// ... code and: "I have three black sweaters in stock."// ... codewhen: "he returns the black sweater for a refund"// ... codethen: "I should have four black sweaters in stock."// ... code}
}

最好是确保测试方案需求到测试方案实现的准确映射。 如果我们可以输出的语法,我们可以走这条路
给定什么时候,然后从我们的测试。 Spock允许我们通过其扩展框架添加此功能。

因此,假设我们的BA真的很好奇,并且希望开发人员更加放心,他们坚持使用相同的给定时间,格式,并且代码是同步的。 他们希望轻松获得此信息。 开发人员可以通过首先定义此注释来提供此信息

import java.lang.annotation.*
import org.spockframework.runtime.extension.ExtensionAnnotation@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@ExtensionAnnotation(ReportExtension)
@interface LogScenarioDescription {}

接下来是此实现:

import org.apache.log4j.Logger
import org.spockframework.runtime.AbstractRunListener
import org.spockframework.runtime.extension.AbstractAnnotationDrivenExtension
import org.spockframework.runtime.model.FeatureInfo
import org.spockframework.runtime.model.SpecInfoclass LogScenarioDescriptionExtension extends AbstractAnnotationDrivenExtension; {final static Logger logger = Logger.getLogger("scenarioLog." + ReportExtension.class);@Overridevoid visitSpecAnnotation(Report annotation, SpecInfo spec) {spec.addListener(new AbstractRunListener() {@Overridevoid afterFeature(FeatureInfo feature) {if (System.getEnv("logScenarios")) {logger.info("***SCENARIO TEST:*** " + feature.name)for (block in feature.blocks) {logger.info(block.kind);for (text in block.texts) {logger.info(text)}}}}})}
}

然后将其应用于测试

@LogScenarioDescription
class SampleSpec extends Specification{//...

执行测试后,将给出以下输出:

***SCENARIO TEST:*** Scenario 1: Refunded items should be returned to stock
GIVEN
that a customer previously bought a black sweater from me
AND
I have three black sweaters in stock.
WHEN
he returns the black sweater for a refund
THEN
I should have four black sweaters in stock.

使用以下log4j输出到特定的日志文件以进行方案记录:

log4j.rootLogger=INFO, stdoutlog4j.logger.scenarioLog.extension.custom=INFO, scenarioLoglog4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%m%nlog4j.appender.scenarioLog=org.apache.log4j.FileAppender
log4j.appender.scenarioLog.File=logs/scenario.log
log4j.appender.scenarioLog.layout=org.apache.log4j.PatternLayout
log4j.appender.scenarioLog.layout.ConversionPattern=%m%n

现在您有了一个日志文件,您的BA,QA可以读取它! 这有助于建立协作和ATDD的敏捷文化,在此文化中,可以检查已达成一致的测试方案是否已实现。

翻译自: https://www.javacodegeeks.com/2017/07/outputting-given-extending-spock.html

spock

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

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

相关文章

将serversocket 写在按钮事件中连接不上_Java服务器的模型—TCP连接/流量优化

本文很长哦,但请给我一点时间。通常,我们的应用程序不需要并行处理成千上万的用户,也不需要在一秒钟内处理成千上万的消息。我们只需要应付数十或数百个并发连接的用户,就可以在内部应用程序或某些微服务应用程序中承受如此大的负…

ios 开发设置左滑退出_苹果铃声怎么设置自己的歌?教你用手机快速搞定!

苹果手机铃声怎么设置为自己喜欢的歌曲?由于iOS系统的封闭性,想要给苹果手机更换铃声不像在安卓手机一样那么方便,看到网上很多教程也是需要使用电脑才能完成铃声的设置,有没有不复杂的方法来直接帮我们更换手机铃声?别…

dp括号匹配 网易面试题_面试题:大括号验证

dp括号匹配 网易面试题这是较容易的编码任务之一,但是您仍然可以在一些初步的技术筛选中达到目标。 问题看起来像这样: 给定仅包含字符( , ) , { , } , [和]的字符串,请确定输入字符串是否有效…

MySQL如何删除有外键约束的数据

在数据库中查看外键是否有效,值为1表示外键有效 mysql> select foreign_key_checks; ---------------------- | foreign_key_checks | ---------------------- | 1 | ---------------------- 1 row in set (0.00 sec)将外键的值设置为0,此时…

python绘制动画示例_Python使用matplotlib绘制动画的方法

本文实例讲述了Python使用matplotlib绘制动画的方法。分享给大家供大家参考。具体分析如下:matplotlib从1.1.0版本以后就开始支持绘制动画下面是几个的示例:第一个例子使用generator,每隔两秒,就运行函数data_gen:# -*…

基于单片机步进电机ppt答辩_基于MCU和DSP的步进电机控制技术分析

来源 | 控制与传动步进电机已经渗透入我们生活的方方面面,本文介绍了一些重要的步进电机相关技术,为开发人员基本了解步进电机的工作原理提供了足够的信息,同时也介绍了用微控制器或数字信号处理器控制步进电机的方法。步进电机也叫步进器&am…

拼图登陆拼图二维码验证_另一个拼图观点

拼图登陆拼图二维码验证在过去的几周中,围绕Java 9即将发布及其最著名的功能:Java平台模块系统JPMS进行了激烈的辩论。 –以其项目名称Jigsaw更为人所知。 模块系统以正式规范过程的形式引入Java生态系统 – JSR –需要由专家组以最终形式批准。 在该专…

【C++】多线程(四)

这是多线程的最后一篇文章。 std::promise promise 的作用很简单,在一个线程t1中保存一个类型typename T的值,可供相绑定的std::future对象在另一线程t2中获取。事实上,它与future基本是成对出现的。来看下面的例子: //声明一个…

广告设计师如何使用python_设计师必看!高效率工具,30分钟完成别人一天的工作!...

原标题:设计师必看!高效率工具,30分钟完成别人一天的工作!世界上只有两种物质:高效率和低效率;世界上只有两种人:高效率的人和低效率的人。—— 萧伯纳今天这篇文章主要想和大家分享一个效率工具…

Linux/MacOS/Mac OS 命令终端/命令行如何查找文件/搜索文件和删除文件

文章目录问题一:我要在当前目录下查找名称中含有“Lib”的文件和目录,注意不要在子目录下查找问题二:在当前目录下如何删除名称中含有“abc”的文件和文件夹问题一:我要在当前目录下查找名称中含有“Lib”的文件和目录&#xff0c…

div获取第一个子节点jquery_【antd】Tree组件子节点不完全勾选获取父节点的值

注意⚠️:这篇文章适用于后台返回的树结构比较多的情况下,如果数据比较少的情况下,可以参考我的上一篇文章,操作起来比较简单我们在实际操作tree组件和后台交互的时候一般都是需要将父节点传过去,如图:点击…

java中的jpa_在JPA中处理Java的LocalDateTime

java中的jpa几天前,我在处理JPA中的LocalDateTime属性时遇到问题。 在这篇博客文章中,我将尝试创建一个样本问题来说明该问题以及我使用的解决方案。 考虑以下实体,该实体为特定公司的员工建模– Entity Getter Setter public class Employ…

修改value_Python | 快速修改或命名N个文件夹名称,你会吗?

#欢迎交流:shuilinggan163.com#工作中,经常会遇到需要修改或新建很多文件的文件命,是一件重复且头疼的事情,下面一组Python代码,轻松教你快速实现!程序一:根据文件(SSSSSS)新建并命名空文件夹im…

linux离线安装python3.7教程_Linux傻瓜式七步完美安装Python3.7

1 安装依赖包yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel gcc2 下载解压Python3.7# 1 首先切换到桌面cd /home# 2 下载wget http://www.python.org/f…

IntelliJ IDEA for Mac在MacOS模式下打开系统设置(偏好设置)的快捷键(Preferences Shortcut)

快捷键快捷键符号英文名称功能说明Command ,⌘,Open Settings dialog打开IDEA系统设置

gwt格式_GWT HTTP请求替代方案

gwt格式由于多种原因 ,许多GWT用户放弃了RPC机制,这是GWT提供的调用后端的标准方法。 他们发现,在GWT RequestBuilder与其他可能不适合其应用程序模型的外部库之间迷失了自己。 这篇文章的目的是要通过GWT中众所周知的HTTP / Rest库来尝试使情…

簇的局部变量中布尔类型_java基础2(变量、常量、数据类型)

一、注释(1)什么是注释?解释说明的文字(注释的内容不会被编译)(2)注释的作用①对代码的解释说明 ②便于后期维护(3)注释的分类:①单行注释 //单行注释作用域:只在当前行有…

python生成海报_生成海报(前端 | python)

我最近没有摸鱼,一直都在工作。只不过目前需要爬一点数据 python 做的,之后看机会分享一下。忙着忙着老大说要生成海报,有个活动要给每个用户来个分享图。想法PS 批处理?脚本? 能甩出去的活都甩出去,机智如…

数位进制转换详解

文章目录进制进制转换二进制和十进制互相转换十进制 → 二进制十进制正整数 → 二进制十进制负整数 → 二进制十进制负小数 → 二进制十进制小数 → 二进制二进制 → 十进制二进制负整数 → 十进制二进制的正整数 → 十进制二进制小数 → 十进制二进制的负小数 → 十进制八进制…

java agent_如何脚踏实地构建Java Agent

java agent在构建Plumbr的多年中,我们遇到了许多具有挑战性的问题。 在其他方面,使Plumbr Java Agent可靠地执行而不会危及客户的应用程序,是一个特别棘手的问题。 从实时系统中安全地收集所有需要的遥测会带来很多问题。 其中一些非常简单&a…