Có cách nào ưu tiên để thiết kế thử nghiệm Specs2, với nhiều thử nghiệm phụ thuộc vào kết quả của các thử nghiệm trước đó không?Làm thế nào thiết kế một bài kiểm tra cơ sở dữ liệu Specs2, với các bài kiểm tra phụ thuộc lẫn nhau?
Dưới đây, bạn sẽ tìm thấy bộ thử nghiệm hiện tại của mình. Tôi không thích các var
s giữa các đoạn thử nghiệm. Mặc dù vậy, chúng là "cần thiết" vì một số thử nghiệm tạo ra các số ID mà các thử nghiệm tiếp theo sử dụng lại.
Tôi có nên lưu trữ số ID trong Specs2 Bối cảnh thay vào đó, hoặc tạo một đối tượng riêng chứa tất cả trạng thái có thể thay đổi không? Và chỉ đặt các mảnh thử nghiệm trong đối tượng đặc tả? Hoặc là có một số cách tiếp cận tốt hơn?
Nếu thử nghiệm không thành công, tôi muốn hủy thử nghiệm còn lại ở cùng độ sâu. Tôi có thể làm cho các mảnh thử nghiệm phụ thuộc vào nhau không? (Tôi biết tôi có thể hủy quẹt còn lại trong một đoạn thử nghiệm duy nhất (bằng cách sử dụng các bài kiểm tra có thể thay đổi, hoặc thông qua orSkip), nhưng những gì về việc hủy toàn bộ mảnh vỡ?)
.
object DatabaseSpec extends Specification {
sequential
"The Data Access Object" should {
var someId = "" // These var:s feels error prone, is there a better way?
"save an object" >> {
someId = database.save(something)
someId must_!= ""
// I'd like to cancel the remaining tests, below, at this "depth",
// if this test fragmen fails. Can I do that?
// (That is, cancel "load one object", "list all objects", etc, below.)
}
"load one object" >> {
anObject = database.load(someId)
anObject.id must_== someId
}
"list all objects" >> {
objs = database.listAll()
objs.find(_.id == someId) must beSome
}
var anotherId = ""
...more tests that create another object, and
...use both `someId` and `anotherId`...
var aThirdId = ""
...tests that use `someId`, `anotherId` and `aThirdId...
}
"The Data Access Object can also" >> {
...more tests...
}
}
Thông số BTW2 3.x đã được thiết kế để giải quyết vấn đề chính xác này, nơi bạn có thể tạo các bài kiểm tra tùy ý dựa trên kết quả của các bài kiểm tra trước đó. Xem tại đây: https://etorreborre.github.io/specs2/guide/SPECS2-3.1.1/org.specs2.guide.CreateOnlineSpecifications.html – Eric