运行 没有设置的特定 Spock 测试?
Run specific Spock Tests without setup?
在 documentation 中,Spock 在 'Fixture Methods' 部分提到了这些函数:
def setup() {} // run before every feature method
def cleanup() {} // run after every feature method
def setupSpec() {} // run before the first feature method
def cleanupSpec() {} // run after the last feature method
我正在使用设置函数为所有测试初始化新对象。然而,一些测试应该测试当没有其他对象时会发生什么。
由于设置的原因,这些测试现在失败了。
有什么方法可以暂停某些功能的设置吗?也许是注释?
或者我必须创建一个单独的 "setup" 函数并在我做的每个测试中调用它们。大多数测试都使用它!
您始终可以仅针对该特定方法覆盖测试方法内的值。看看下面的例子:
import spock.lang.Shared
import spock.lang.Specification
class SpockDemoSpec extends Specification {
String a
String b
@Shared
String c
def setup() {
println "This method is executed before each specification"
a = "A value"
b = "B value"
}
def setupSpec() {
println "This method is executed only one time before all other specifications"
c = "C value"
}
def "A empty"() {
setup:
a = ""
when:
def result = doSomething(a)
then:
result == ""
}
def "A"() {
when:
def result = doSomething(a)
then:
result == "A VALUE"
}
def "A NullPointerException"() {
setup:
a = null
when:
def result = doSomething(a)
then:
thrown NullPointerException
}
def "C"() {
when:
def result = doSomething(c)
then:
result == 'C VALUE'
}
private String doSomething(String str) {
return str.toUpperCase()
}
}
在此示例中,a
和 b
是在每次测试之前设置的,而 c
仅在执行任何规范之前设置一次(这就是为什么它需要 @Shared
注释以在执行之间保持其值)。
当我们运行这个测试时我们会在控制台看到如下输出:
This method is executed only one time before all other specifications
This method is executed before each specification
This method is executed before each specification
This method is executed before each specification
This method is executed before each specification
一般的经验法则是,在 setupSpec
方法中设置后,您不应更改 c
值 - 主要是因为您不知道要进行哪个顺序测试被执行(如果你需要保证顺序,你可以用 @Stepwise
注释来注释你的 class - Spock 将 运行 所有情况下的顺序,它们在这种情况下被定义)。在 a
和 b
的情况下,您可以在单个方法级别重写 - 它们将在执行另一个测试用例之前重新初始化。希望对你有帮助。
在 documentation 中,Spock 在 'Fixture Methods' 部分提到了这些函数:
def setup() {} // run before every feature method
def cleanup() {} // run after every feature method
def setupSpec() {} // run before the first feature method
def cleanupSpec() {} // run after the last feature method
我正在使用设置函数为所有测试初始化新对象。然而,一些测试应该测试当没有其他对象时会发生什么。
由于设置的原因,这些测试现在失败了。
有什么方法可以暂停某些功能的设置吗?也许是注释?
或者我必须创建一个单独的 "setup" 函数并在我做的每个测试中调用它们。大多数测试都使用它!
您始终可以仅针对该特定方法覆盖测试方法内的值。看看下面的例子:
import spock.lang.Shared
import spock.lang.Specification
class SpockDemoSpec extends Specification {
String a
String b
@Shared
String c
def setup() {
println "This method is executed before each specification"
a = "A value"
b = "B value"
}
def setupSpec() {
println "This method is executed only one time before all other specifications"
c = "C value"
}
def "A empty"() {
setup:
a = ""
when:
def result = doSomething(a)
then:
result == ""
}
def "A"() {
when:
def result = doSomething(a)
then:
result == "A VALUE"
}
def "A NullPointerException"() {
setup:
a = null
when:
def result = doSomething(a)
then:
thrown NullPointerException
}
def "C"() {
when:
def result = doSomething(c)
then:
result == 'C VALUE'
}
private String doSomething(String str) {
return str.toUpperCase()
}
}
在此示例中,a
和 b
是在每次测试之前设置的,而 c
仅在执行任何规范之前设置一次(这就是为什么它需要 @Shared
注释以在执行之间保持其值)。
当我们运行这个测试时我们会在控制台看到如下输出:
This method is executed only one time before all other specifications
This method is executed before each specification
This method is executed before each specification
This method is executed before each specification
This method is executed before each specification
一般的经验法则是,在 setupSpec
方法中设置后,您不应更改 c
值 - 主要是因为您不知道要进行哪个顺序测试被执行(如果你需要保证顺序,你可以用 @Stepwise
注释来注释你的 class - Spock 将 运行 所有情况下的顺序,它们在这种情况下被定义)。在 a
和 b
的情况下,您可以在单个方法级别重写 - 它们将在执行另一个测试用例之前重新初始化。希望对你有帮助。