Spock 和 Spock 报告:如何打印 Label/Block 中有价值的变量
Spock & Spock Reports: How print a variable valuable in Label/Block
我正在与:
- Spock 核心
- Spock 报告
- 史波克Spring
- Spring MVC 测试
我有以下代码:
def "findAll() Expected"(){
given: "The URL being used is: /personas/xml/personas"
url = PersonaUrlHelper.FINDALL;
when: "When the URL is being calling with a GET"
resultActions = mockMvc.perform(get(url)).andDo(print())
then: "something..."
resultActions.andExpect(status().isOk())
.andExpect(content().contentType(RequestMappingProducesJsonUtf8.PRODUCES_JSON_UTF_8))
}
两个观察:
一个:观察 given: "The URL being used is: /personas/xml/personas"
手动添加 URL/URI 值的位置。
二:url
变量已经定义了一个实例变量,因为它在很多测试方法中很常见。因此def String url
我的问题是:
如何在 Spock 的 label/block 中显示 url
变量?如何(给定,然后……)?它将通过 Spock Reports 打印并改进我的测试文档
我已阅读以下内容:
Spocklight: Extra Data Variables for Unroll Description
它围绕 @Unroll 工作。但我确实意识到所有围绕 where
label/block.
的工作
我已经尝试过类似的方法:
given: "The URL being used is: $url"
given: "The URL being used is: ${url}"
并且不起作用
我想使用类似于以下的语法来解决问题:
def "findAll() Expected"(){
url = PersonaUrlHelper.FINDALL;
given: "The URL being used is: $url"
…. something
when: "When the URL is being calling with a GET"
那么正确的配置是什么?
假设我对 Spring 的 @RequestMapping
和此测试方法中使用的 PersonaUrlHelper.FINDALL
进行了重构。我不想手动更新 given
label/block
中的文本
那么正确的语法是什么?
快速回答:
我想 where
-block 方法是正确的方法。使用像
这样的东西
where: "When the URL is being calling with a GET"
url << PersonaUrlHelper.FINDALL
并从测试中删除 url
的定义。您将能够使用 url
变量,因为它是在 where
块中定义的。您将能够从测试描述中将其引用为 #url
:
@Unroll
def "findAll() Expected"(){
given: "The URL being used is: #url"
//removed url definition
when: "When the URL is being calling with a GET"
resultActions = mockMvc.perform(get(url)).andDo(print())
then: "something..."
resultActions.andExpect(status().isOk())
.andExpect(content().contentType(RequestMappingProducesJsonUtf8.PRODUCES_JSON_UTF_8))
where: "When the URL is being calling with a GET"
url << [PersonaUrlHelper.FINDALL]
}
另一种更 hacky 的方法是通过 println url
打印 url
- 这个输出也被捕获,但它不会那么好。
更新: 请查看以下 spock 控制台脚本:https://meetspock.appspot.com/script/5146767490285568 :
import spock.lang.*
class PersonalUrlHelper {
final static String FINDALL = 'http://example.com'
}
class MyFirstSpec extends Specification {
@Unroll
def "findAll() Expected #url "(){
given:"The URL being used is: #url"
when: "When URL (#url) is assigned to a"
def a = url
then: "a equals the URL (#url)"
a == url
where: "the URL is fetched from another class or map in this case"
url << [PersonalUrlHelper.FINDALL]
}
}
我试图在没有你的代码的情况下模拟你的脚本。
可以看到,测试名称中打印出了URL的内容。 AFAIK,当通过 spock-reports 打印出来时,它也会反映在不同测试块的文本中。
顺便说一句:[]
很重要,因为它们将返回的字符串转换为包含一个元素的列表。否则字符串将被解释为 lsit 并且测试将遍历每个字符。
这有帮助吗?
我正在与:
- Spock 核心
- Spock 报告
- 史波克Spring
- Spring MVC 测试
我有以下代码:
def "findAll() Expected"(){
given: "The URL being used is: /personas/xml/personas"
url = PersonaUrlHelper.FINDALL;
when: "When the URL is being calling with a GET"
resultActions = mockMvc.perform(get(url)).andDo(print())
then: "something..."
resultActions.andExpect(status().isOk())
.andExpect(content().contentType(RequestMappingProducesJsonUtf8.PRODUCES_JSON_UTF_8))
}
两个观察:
一个:观察 given: "The URL being used is: /personas/xml/personas"
手动添加 URL/URI 值的位置。
二:url
变量已经定义了一个实例变量,因为它在很多测试方法中很常见。因此def String url
我的问题是:
如何在 Spock 的 label/block 中显示 url
变量?如何(给定,然后……)?它将通过 Spock Reports 打印并改进我的测试文档
我已阅读以下内容: Spocklight: Extra Data Variables for Unroll Description
它围绕 @Unroll 工作。但我确实意识到所有围绕 where
label/block.
我已经尝试过类似的方法:
given: "The URL being used is: $url"
given: "The URL being used is: ${url}"
并且不起作用
我想使用类似于以下的语法来解决问题:
def "findAll() Expected"(){
url = PersonaUrlHelper.FINDALL;
given: "The URL being used is: $url"
…. something
when: "When the URL is being calling with a GET"
那么正确的配置是什么?
假设我对 Spring 的 @RequestMapping
和此测试方法中使用的 PersonaUrlHelper.FINDALL
进行了重构。我不想手动更新 given
label/block
那么正确的语法是什么?
快速回答:
我想 where
-block 方法是正确的方法。使用像
where: "When the URL is being calling with a GET"
url << PersonaUrlHelper.FINDALL
并从测试中删除 url
的定义。您将能够使用 url
变量,因为它是在 where
块中定义的。您将能够从测试描述中将其引用为 #url
:
@Unroll
def "findAll() Expected"(){
given: "The URL being used is: #url"
//removed url definition
when: "When the URL is being calling with a GET"
resultActions = mockMvc.perform(get(url)).andDo(print())
then: "something..."
resultActions.andExpect(status().isOk())
.andExpect(content().contentType(RequestMappingProducesJsonUtf8.PRODUCES_JSON_UTF_8))
where: "When the URL is being calling with a GET"
url << [PersonaUrlHelper.FINDALL]
}
另一种更 hacky 的方法是通过 println url
打印 url
- 这个输出也被捕获,但它不会那么好。
更新: 请查看以下 spock 控制台脚本:https://meetspock.appspot.com/script/5146767490285568 :
import spock.lang.*
class PersonalUrlHelper {
final static String FINDALL = 'http://example.com'
}
class MyFirstSpec extends Specification {
@Unroll
def "findAll() Expected #url "(){
given:"The URL being used is: #url"
when: "When URL (#url) is assigned to a"
def a = url
then: "a equals the URL (#url)"
a == url
where: "the URL is fetched from another class or map in this case"
url << [PersonalUrlHelper.FINDALL]
}
}
我试图在没有你的代码的情况下模拟你的脚本。
可以看到,测试名称中打印出了URL的内容。 AFAIK,当通过 spock-reports 打印出来时,它也会反映在不同测试块的文本中。
顺便说一句:[]
很重要,因为它们将返回的字符串转换为包含一个元素的列表。否则字符串将被解释为 lsit 并且测试将遍历每个字符。
这有帮助吗?