Testing 斯波克公司;Spock报告:如何在标签/块中打印有价值的变量

Testing 斯波克公司;Spock报告:如何在标签/块中打印有价值的变量,testing,spock,spock-reports,Testing,Spock,Spock Reports,我的工作对象是: 斯波克堆芯 斯波克报道 斯波克弹簧 springmvc测试 我有以下代码: 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" resultAct

我的工作对象是:

  • 斯波克堆芯
  • 斯波克报道
  • 斯波克弹簧
  • springmvc测试
我有以下代码:

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))

}
两项意见:

One:观察
给定:“使用的URL是:/personas/xml/personas”
,其中URL/URI值是手动添加的

Two
url
变量是如何定义实例变量的,因为它在许多测试方法中很常见。因此
def字符串url

我的问题是:

如何在Spock的标签/块中显示
url
变量?(那么)怎么给?它将通过斯波克报告打印,并改进我的测试文档

我读了以下内容:

它围绕着@Unroll工作。但我确实意识到了所有围绕
where
标签/块的工作

我已经尝试过类似的方法:

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"
那么正确的配置是什么呢

Asume我对一些Spring的
@RequestMapping
和本测试方法中使用的
PersonalHelper.FINDALL
进行重构。我不想手动更新给定标签/块中的
文本

那么正确的语法是什么呢?

快速回答:

我想
其中
块方法将是正确的方法。使用类似

where: "When the URL is being calling with a GET"
  url << PersonaUrlHelper.FINDALL
另一种更黑客的方法是通过一个
println url
打印
url
——这个输出也会被捕获,但不会那么好

更新:请查看以下spock控制台脚本:

导入spock.lang*
类PersonalUrlHelper{
最终静态字符串FINDALL='1〕http://example.com'
}
类MyFirstSpec扩展了规范{
@展开
def“findAll()应为#url”(){
给定:“正在使用的URL为:#URL”
当:“当URL(#URL)被分配给
defa=url
然后:“a等于URL(#URL)”
a==url
其中:“在本例中,URL是从另一个类或映射获取的”

url我已经测试了你的解决方案,它不起作用。首先,我收到一个错误,关于我不能在最新的
之后声明
,然后是
。变量总是空的。我刚刚修复了输入错误-最后一个块应该是
where
-对不起。我还将看看我是否有时间自己测试我的答案,以确定还有其他问题…请继续关注…谢谢!有两个问题(1)
之后无法使用
,然后
(2)您的
url请查看添加的详细信息。关于
空指针
-我猜它是由您的
FINDALL
帮助程序方法产生的。请确保它不会返回
-它应该返回一个列表,或者,如果它返回单个项目,则将其放入
[]
brakets正如我在我的示例中所做的那样。您好@rdmueller您的代码现在可以工作了。继续将您的代码粘贴到此处,以应用您的答案是否正确。是的,诀窍是
[]
@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]
}
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]
  }
}