Tôi có câu hỏi chung hơn. Tôi nên sử dụng khung hoặc triển khai nào để mô phỏng trong Grails 2.x khi sử dụng Spock?Thử nghiệm Grails với Spock - Khung Mocking nào Chọn?
Tôi biết tấn phong cách nhạo báng: đòn bẩy Groovy metaClass, Grails mockFor(), Groovy Mock(), kiểu đóng gói Groovy, vv Mỗi loại đều có những ưu điểm và nhược điểm riêng. Nhưng những gì tôi không hiểu là một số phong cách chế giễu làm việc trong những dịp nhất định mà tôi không thể xác định (tức là mockFor() hoạt động để thực hiện nhất định và không cho những người khác).
Hiện tại tôi có hai cách thực hiện tương tự phương thức dịch vụ nhạo báng.
Cái này hoạt động:
@TestFor(MyController)
@Mock([MyDevice])
class MyControllerSpec extends ControllerSpec {
void "test st."() {
def myService = mockFor(MyService)
myService.demand.myMethod() { def st ->
return "test"
}
controller.myService = myService.createMock()
}
}
Tuy nhiên, thực hiện điều này không làm việc:
@TestFor(MyController)
@Mock([MyDevice])
class MyControllerSpec extends ControllerSpec {
void "test st."() {
def yourService = mockFor(YourService)
yourService.demand.yourMethod() { def st ->
return "test"
}
controller.yourService = yourService.createMock()
}
}
Việc thực hiện dịch vụ và gọi từ bộ điều khiển là khá tương tự. Vì vậy, thực hành tốt nhất của chế giễu trong Grails là gì? Hoặc là có bất kỳ khuôn khổ mocking GOOD cho Grails mà sẽ tiết kiệm thời gian của tôi tìm ra cách để chế giễu?
Cảm ơn lời khuyên nào! :-)
Mateo
Bạn đã thử khung giả lập của Spock chưa? Nó thực sự rõ ràng và đơn giản. Các tài liệu spock nói rằng nó có thể làm việc với mock spock hoặc mock Groovy, nhưng cảnh báo không nên thử kết hợp hai khung mock vì một lý do nào đó. –
Vâng, đây thực sự là những gì sẽ được sử dụng khi bạn gọi mockFor(); grails.plugin.spock.UnitSpec.mockFor() được gọi. Những gì tôi thấy hữu ích nhất là sử dụng lập trình metaClass trực tiếp để chế nhạo cũng như đóng cửa groovy. Vấn đề duy nhất với điều này là metaClass có thể can thiệp vào các thử nghiệm khác khi bạn không làm sạch nó trong phần nguy hiểm. Có lẽ Grails 2.3 sẽ mang lại sự hỗ trợ tốt hơn vì Spock sẽ mặc định cho phiên bản này ... – kuceram
Nếu câu trả lời phù hợp và đáp ứng kỳ vọng của bạn thì hãy chấp nhận nó để giúp người khác học hỏi từ câu hỏi của bạn. – dmahapatro