gpt4 book ai didi

testing - Spock 和 Spock 报告 : How print a variable valuable in Label/Block

转载 作者:行者123 更新时间:2023-11-28 20:00:04 25 4
gpt4 key购买 nike

我正在与:

  • 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标签/ block 中显示 url 变量?如何(给定,然后……)?它将通过 Spock Reports 打印并改进我的测试文档

我已阅读以下内容: Spocklight: Extra Data Variables for Unroll Description

它围绕 @Unroll 工作。但我确实意识到所有围绕 where 标签/ 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 标签/ block 中的文本

那么正确的语法是什么?

最佳答案

快速回答:

我想 where block 方法将是正确的方法。使用类似的东西

where: "When the URL is being calling with a GET"
url << PersonaUrlHelper.FINDALL

并从测试中删除 url 的定义。您将能够使用 url 变量,因为它是在 where block 中定义的。您将能够从测试描述中引用它作为 #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 打印出来时,它也会反射(reflect)在不同测试 block 的文本中。

顺便说一句:[] 很重要,因为它们将返回的字符串转换为包含一个元素的列表。否则该字符串将被解释为 lsit 并且测试将遍历每个字符。

这有帮助吗?

关于testing - Spock 和 Spock 报告 : How print a variable valuable in Label/Block,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33856627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com