2013-05-27 41 views
13

Tôi muốn thử một số giao diện thông thạo với giả, mà về cơ bản là một người thợ xây mail:Làm thế nào tôi có thể tạo hiệu ứng giao diện thông thạo với mock Spock?

this.builder() 
      .from(from) 
      .to(to) 
      .cc(cc) 
      .bcc(bcc) 
      .template(templateId, templateParameter) 
      .send(); 

Khi chế giễu này với Spock, điều này cần rất nhiều thiết lập như thế này:

def builder = Mock(Builder) 
builder.from(_) >> builder 
builder.to(_) >> builder 

vv Nó trở nên cồng kềnh hơn khi bạn muốn kiểm tra tương tác nhất định với mô hình, tùy thuộc vào trường hợp sử dụng. Vì vậy, tôi về cơ bản có hai câu hỏi ở đây:

  1. Có cách nào để kết hợp quy mô, do đó tôi có thể làm một vị tướng một thiết lập thời gian của giao diện thông thạo một phương pháp mà tôi có thể tái sử dụng trên tất cả các trường hợp thử nghiệm và sau đó chỉ định các quy tắc bổ sung cho mỗi trường hợp thử nghiệm?
  2. Có cách nào để chỉ định chế độ mô phỏng giao diện thông thạo với ít mã hơn, ví dụ: cái gì đó như:

    builder def = Mock (Builder) builder./(from|to|cc|bcc|template)/(*) >> builder

    hoặc một cái gì đó tương đương với Sâu Ống Mockito (xem http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#RETURNS_DEEP_STUBS)

Trả lời

11

Bạn có thể làm một cái gì đó như thế này:

def "stubbing and mocking a builder"() { 
    def builder = Mock(Builder) 
    // could also put this into a setup method 
    builder./from|to|cc|bcc|template|send/(*_) >> builder 

    when: 
    // exercise code that uses builder 

    then: 
    // interactions in then-block override any other interactions 
    // note that you have to repeat the stubbing 
    1 * builder.to("fred") >> builder 
} 
+0

vĩ đại này đang làm việc :) Cảm ơn! Bất kỳ kế hoạch để cải thiện điều này, do đó bạn không cần phải lặp lại các stubbing trong sau đó -part? –

+1

Chúng tôi không có bất kỳ kế hoạch nào cho điều đó. Một thực tế là stubbing và chế giễu của một tương tác xảy ra với nhau là vốn có cách làm việc của Spock khuôn khổ mocking hoạt động. Đó là cách tiếp cận tương tự như được sử dụng bởi JMock, EasyMock, vv Chỉ Mockito sử dụng một cách tiếp cận khác, trong đó có những hạn chế khác. –

+0

Tôi hiểu, cảm ơn vì đã làm rõ điều này :) –

Các vấn đề liên quan