Tôi đang viết bài kiểm tra đơn vị sử dụng Spock cho groovy-2.0 và sử dụng gradle để chạy. Nếu tôi viết sau khi vượt qua bài kiểm tra.Kiểm tra đơn vị Groovy2.0 với Spock: setup()
import spock.lang.Specification
class MyTest extends Specification {
def "test if myMethod returns true"() {
expect:
Result == true;
where:
Result = new DSLValidator().myMethod()
}
}
myMethod() là một phương pháp đơn giản trong lớp DSLValidator, đơn giản trả về đúng.
Nhưng nếu tôi viết một hàm setup() và tạo ra các đối tượng trong setup(), thử nghiệm của tôi thất bại: Gradel nói: FAILED: java.lang.NullPointerException: Không thể gọi phương thức myMethod() trên đối tượng null
Sau đây là giao diện của thiết lập(),
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()
}
}
Ai đó có thể trợ giúp?
Dưới đây là giải pháp tôi đã đến vấn đề:
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()
}
}
Lạ ... Tài liệu Spock thực sự có thể làm với làm rõ về điều này ... Tôi sẽ không nói rằng obj đang được chia sẻ giữa các phương pháp tính năng, nhưng đang được thiết lập trước mỗi vật cố được gọi ... –
Bạn không hiểu điều gì? Một @Shared field _is_ được chia sẻ giữa các phương thức tính năng và phải được thiết lập với một trình khởi tạo trường hoặc phương thức 'setupSpec'. 'setup' không phải là một lựa chọn tốt ở đây bởi vì nó được gọi sau khi khối' where' được đánh giá. –
Cảm ơn bạn đã làm rõ –