2013-05-02 28 views
26

Tôi đã xem xét và thử những thứ khác nhau không có kết quả. Các ví dụ trên mạng nội bộ rất ít và IMHO khá đơn giản. trường hợp của tôi sử dụng:Có cách nào để thực hiện đối số giả lập trong Spock

(các 'itocNetworkHandler' bên dưới là giả)

when: "we're doing stuff" 
    StandardResponse response = cms.doCardStuff("123", "111", order) 
.... 
then: "we get proper calls and response object" 
    1 * cms.itocNetworkHandler.doNetworkCall(
      { it instanceof ReplacementRequestRecord 
      }, StandardResponseRecord.class) >> record 

Tôi muốn để lưu trữ đi những tham số ('nó') để các "doNetworkCall" trên giả.

Lý do tôi muốn tham số là vì đối tượng tôi đang thử nghiệm được cho là đưa các tham số của tôi vào, thực hiện công cụ, tạo đối tượng mới và chuyển đối tượng đó vào mô hình của tôi. Tôi muốn đảm bảo rằng đối tượng được tạo ra trông giống như cách nó được cho là.

Con trỏ được đánh giá cao.

+0

Tại sao bạn muốn lưu trữ đối số? Bạn sẽ làm gì với nó? –

+0

Tôi đã giải thích rõ lý do tại sao tôi cần nó. – Mathias

Trả lời

35

Bạn có thể chụp một đối số như sau:

// must be declared before when-block (or inside Specification.interaction {}) 
def captured 

when: 
... 

then: 
1 * mock.doNetworkCall(...) >> { record, recordClass -> 
    // save the argument 
    captured = record 
    ... 
} 
// use the saved argument 
captured == ... 

Điều đó nói rằng, thường có một giải pháp đơn giản như kiểm tra quyền kỷ lục dự kiến ​​trong chế tranh luận (ví dụ ...doNetworkCall({ it == ... })).

+0

Cảm ơn, công trình. Lý do tôi không muốn nó trong "it ==" vv là tôi muốn rất nhiều kiểm tra, và tôi nghĩ rằng nó tidier nhiều để có tất cả các khẳng định cuối cùng, nếu bạn thấy những gì tôi có ý nghĩa. – Mathias

+0

Bạn có thể đặt các kiểm tra vào một phương thức trợ giúp và gọi phương thức trợ giúp từ ràng buộc đối số. –

+1

Vâng, đó là một khả năng. Tôi nghĩ rằng tôi thích họ cuối cùng mặc dù. Nó cảm thấy một chút "lén lút" để làm các xác nhận trong khối tham số, cho khả năng đọc tôi thích chúng cuối cùng. Hoặc có lẽ tôi không quen với trò chơi. – Mathias