当前位置: 首页 > 知识库问答 >
问题:

在Spock中用一行声明多个变量when:block

索卓
2023-03-14

我想知道如何在Spock规范中定义一行中的多个变量,而不需要初始化,如下所示。

我试过:

import spock.lang.Specification

class exampleSpec extends Specification {

  def "foo"() {
    when:
    def a, b
    a = 0
    b = 1

    then:
    a != b
  }
}

但是,当访问b:时,这将失败:对于class:...没有这样的属性:b

我正在使用:

Groovy Version: 2.4.3 JVM: 1.8.0_45 Vendor: Oracle Corporation OS: Linux

共有1个答案

厍晋鹏
2023-03-14

恐怕这在任何块中都无法完成(比如给定:设置:当:)。周围有一个容易的工作。

@Grab(group='org.spockframework', module='spock-core', version='0.7-groovy-2.0')

import spock.lang.Specification

class ExampleSpec extends Specification {

  def "foo"() {
        def a, b

        when:
        a = 0
        b = 1

        then:
        a != b
    }
}

将声明移出When:/给定:/setup:块,并将它们作为方法变量。setup:/givid:标签是可选的,可以省略,从而导致隐式设置块。

虽然这是有效的,但我想知道为什么这不起作用。您可以在GitHub中创建一个问题。

 类似资料:
  • 问题内容: 在JavaScript中,可以这样声明多个变量: …或像这样: 一种方法比另一种更好/更快吗? 问题答案: 第一种方法更易于维护。每个声明都是一行上的单个语句,因此您可以轻松地添加,删除和重新排列声明。 使用第二种方法时,删除第一个或最后一个声明很烦人,因为它们包含关键字和分号。每次添加新的声明时,都必须将旧行中的分号更改为逗号。

  • 下面会对C语言、着色器语言ES GLSL、javascript语言和TypeScript语言声明变量的方式进行简单展示,这样可以更方便不同基础读者类比学习。 C语言 着色器语言ES GLSL和C语言有很多相似之处,如果你有一定的C语言基础,对于学习着色器语言也是有一定的帮助的。 // C语言声明一个整形变量并赋值10 int count = 10; // 改变变量值,重新赋值 count=20;

  • 问题内容: 我在Python中看到了这个声明,但是我不明白它的含义,也找不到解释: 问题是:和之间为什么会有逗号?那是什么类型的作业? 问题答案: 那是一个 “元组” 或 “解构” 分配- 参见例如多重分配语义。返回包含两个值的元组,因此等效于: 请参阅语言参考中的赋值语句: 如果目标列表是目标的逗号分隔列表:该对象必须是可迭代的,并且具有与目标列表中存在目标的项目数量相同的项目,并且这些项目从左

  • 问题内容: 在我的Java类中,我这样声明变量 或者我们必须在多行中这样声明 我们应该遵循哪一个? 问题答案: 这只是口味和喜好问题。但是,如果您不设置准则,它将与Vim与Emacs或IntelliJ与Eclipse一起,成为大多数开发团队中无休止的辩论/争论的温床。 我建议为您的团队设置编码标准,最简单的方法是引用现有的标准,例如Sun(现在为Oracle)Java准则,在这种情况下建议每行使用

  • 问题内容: 是否可以使用Golang一次声明多个变量? 例如,在Python中,您可以输入以下内容: 所有值均为80。 问题答案: 是的你可以: 您可以对内联分配执行类似的操作,但不太方便:

  • let和const是JavaScript里相对较新的变量声明方式。 像我们之前提到过的,let在很多方面与var是相似的,但是可以帮助大家避免在JavaScript里常见一些问题。 const是对let的一个增强,它能阻止对一个变量再次赋值。 因为TypeScript是JavaScript的超集,所以它本身就支持let和const。 下面我们会详细说明这些新的声明方式以及为什么推荐使用它们来代替v