关于如何使用其标签的示例,如:那里、是、这么多、斯波克、斯波克、等级库
// when -> then label combo
def "test something"() {
when:
// blah
then:
// blah blah
}标签组合,如:
when -> thengiven -> when -> thenexpectgiven -> expect但是,我找不到关于这些标签的合法/有意义的组合的文档。例如,我是否可以:
def "do something"() {
when:
// blah
expect:
// blah
}我可以吗?我不知道。那麽:
def "do something else"() {
when:
// blah
then:
// blah
expect:
// blah
where:
// blah
}我可以吗?再说一遍,我不知道。但我想知道。
发布于 2015-10-10 15:01:19
我实际上是你提到的一个教程的作者。我认为回答你的问题的最好办法是真正理解特殊标签的用途。也许这样会更明显,为什么某些组合是合理的,而另一些则不合理。请参阅原始文档primer.html。它很好地解释了所有的标签和它们的目的。此外,它还附带了以下图表:

我希望能告诉你很多。因此,例如,当和同时使用标签时,就没有多大意义了。expect标签的设计目的是在和(然后是)两种情况下替换。其背后的原因在文件中得到了很好的解释:
一个期待的街区。是有用的情况下,它是更自然地描述刺激和预期的反应在一个单一的表达。
Spock本身将不允许您使用此组合。如果您试图执行以下代码。
def "test"() {
when:
println("test")
expect:
1==1
}您将收到这样的错误消息。
启动失败: /Users/wooki/IdeaProjects/mylibrary/src/test/groovy/ExampleTest.groovy: 13:'expect‘在这里是不允许的;相反,使用一个:,然后@第13行,第9列。
令我惊讶的是,你的第二个例子奏效了。但是,我认为在这里使用expect而不是像我通常所做的那样使用和并没有多大好处。
def "do something else"() {
when:
// stimulus
then:
// 1st verification
and:
// 2nd verification
where:
// parametrization
}让在之后使用或和的唯一原因是,当标签时,将负责验证中代码执行结果的代码分开。例如,对相互关联的验证进行分组,甚至对单独的验证进行分组,但是有可能使用可以附加到Spock中标签的字符串来对它们进行描述。
def "do something else"() {
when:
// stimulus
then: "1 is always 1"
1 == 1
and: "2 is always 2"
2 == 2
}因此,既然您已经声明测试的验证部分已经开始(使用然后块),我将坚持使用和标签来分离进一步的代码。
关于的标签。它的工作有点像一个循环指示器。因此,无论您使用哪种标签组合,都可以将where标签放在标签的末尾。这个测试并不是单个测试运行的一部分,它只是强制测试运行了很多次。
也有可能出现这样的情况:
def "test"() {
given:
def value
when:
value = 1
then:
value == 1
when:
value = 2
then:
value == 2
}使用上述方法,只需确保您的测试不是“测试太多”。这意味着,这可能是为什么你使用两组时间-然后成为一个完美的借口,这个测试被分为两个单独的测试。
我希望这至少回答了你的一些问题。
https://stackoverflow.com/questions/33049163
复制相似问题