gpt4 book ai didi

groovy - 使用Spock : setup( )进行Groovy2.0单元测试

转载 作者:行者123 更新时间:2023-12-04 04:57:45 25 4
gpt4 key购买 nike

我正在使用Spock为groovy-2.0编写单元测试,并使用gradle运行。如果我写下面的测试通过。

import spock.lang.Specification

class MyTest extends Specification {

def "test if myMethod returns true"() {
expect:
Result == true;
where:
Result = new DSLValidator().myMethod()

}
}

myMethod()是DSLValidator类中的一个简单方法,仅返回true。

但是,如果我编写一个setup()函数并在setup()中创建对象,则测试失败:Gradel说:失败:java.lang.NullPointerException:无法在空对象上调用方法myMethod()

以下是setup()的外观,
import spock.lang.Specification

class MyTest extends Specification {

def obj

def setup(){
obj = new DSLValidator()
}

def "test if myMethod returns true"() {
expect:
Result == true;
where:
Result = obj.myMethod()

}
}

有人可以帮忙吗?

这是我解决该问题的解决方案:
import spock.lang.Specification

class DSLValidatorTest extends Specification {

def validator

def setup() {
validator = new DSLValidator()
}


def "test if DSL is valid"() {

expect:
true == validator.isValid()
}
}

最佳答案

在Spock中,存储在实例字段中的对象在要素方法之间不共享。相反,每个功能方法都有自己的对象。

如果需要在要素方法之间共享对象,则声明一个@Shared字段

class MyTest extends Specification {
@Shared obj = new DSLValidator()

def "test if myMethod returns true"() {
expect:
Result == true
where:
Result = obj.myMethod()
}
}
class MyTest extends Specification {
@Shared obj

def setupSpec() {
obj = new DSLValidator()
}

def "test if myMethod returns true"() {
expect:
Result == true
where:
Result = obj.myMethod()
}
}

有两种设置环境的治具方法:
def setup() {}         // run before every feature method
def setupSpec() {} // run before the first feature method

我不明白为什么 setupSpec()的第二个示例可以工作,而 setup()失败,因为在 documentation中另有说明:

Note: The setupSpec() and cleanupSpec() methods may not reference instance fields.

关于groovy - 使用Spock : setup( )进行Groovy2.0单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9084782/

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