Trong một số kỹ thuật Spock bất kỳ dòng trong mong đợi: hoặc thì: khối được đánh giá và khẳng định như boolean
, trừ khi nó có chữ ký với sự trở lại loại void
.Có cách nào để ngăn Geb trả về null từ các phương thức không?
Tôi đã nhận thấy rằng có điều gì đó kỳ lạ xảy ra đối với các phương thức được khai báo là void
đối với bất kỳ lớp nào kế thừa từ Navigator
(ví dụ: Page
hoặc Module
lớp).
Hãy nói rằng chúng ta có ví dụ như:
class NavigationSpec extends GebSpec {
def 'Collections page has a right header'() {
when:
to CollectionsPage
then:
hasHeaderText('Collections')
}
}
Phương pháp hasHeaderText()
được định nghĩa trong CollectionsPage
lớp như sau:
class CollectionsPage extends Page {
static url = 'movies/collections'
void hasHeaderText(String expectedText) {
assert true
}
}
Mở mục đích Tôi chỉ khẳng định true
đằng kia nên nó sẽ không bao giờ Thất bại. Mặc dù nó không thành công với một lỗi:
Condition not satisfied:
hasHeaderText('Collections')
|
null
Làm thế nào và tại sao một kết quả gọi void
phương pháp được đánh giá là null
?
Tôi biết cách 'khắc phục sự cố'. Đủ để khai báo kiểu trả về của phương thức là boolean
và trả lại true
. Điều này là xấu mặc dù như sau tất cả các khẳng định khác không cần thiết return true
phải được thêm vào như:
boolean hasHeaderText(String expectedText) {
assert header.text() == expectedText
return true
}
Điều này chỉ gây ra tiếng ồn. Có cách nào để ngăn Geb trả lại null
từ các phương thức void
không?
tôi, tất nhiên, nhận thức được rằng trường hợp cụ thể này có thể đi như:
boolean hasHeaderText(String expectedText) {
header.text() == expectedText`
}
này không giải thích kỳ quặc của mất loại void
trở lại, chưa kể chúng ta mất đi ý nghĩa thông báo lỗi assert với cách tiếp cận như vậy.
Cảm ơn câu trả lời của bạn. Tôi nhận thức được những điều bạn đã viết, đặc biệt là phần trong ghi chú 'chỉnh sửa'. Thật vậy, phương pháp void không nên được đánh giá như khẳng định trong khối sau đó của spock. Phương thức của trang được khai báo theo cách thông thường, nhưng đó cũng là giả thiết của tôi, rằng Geb thực hiện một số phép thuật AST với nó và do đó phá vỡ hợp đồng. Sử dụng các boolean với 'expectedText' bên ngoài phương thức là xa những gì tôi muốn đạt được. Điện xác nhận các thông báo thất bại phức tạp bị mất (suy nghĩ về việc so sánh hai bản đồ ví dụ) và văn bản phải được lặp lại mỗi khi phương pháp được sử dụng (DRY). Tôi coi đây là lỗi Geb – topr