2011-09-07 37 views

Trả lời

16

Bạn có thể nghĩ về một mô hình (hoặc đôi) như là một đối tượng giả. Khi bạn đang thử nghiệm và cần phải làm việc với một đối tượng không dễ dàng sử dụng được trong thử nghiệm của mình, bạn có thể sử dụng mô hình như một phép tính xấp xỉ về cách bạn mong đợi đối tượng đó hoạt động và làm việc xung quanh nó. Sơ khai có thể được sử dụng theo cách tương tự nhưng trên một phương thức riêng lẻ trên một đối tượng.

Dưới đây là một ví dụ khá giả tạo của việc sử dụng rất nhiều cả:

class Client 
    def connect_to_server 
    if Server.connect.status == 'bad' 
     show_an_error 
    else 
     do_something_else 
    end 
    end 
    def do_something_else; end 
    def show_an_error; end 
end 

context "failure" do 
    it "displays an error" do 
    bad_network_response = double("A bad response from some service", :status => 'bad') 
    Server.should_receive(:connect).and_return(bad_network_response) 

    client = Client.new 
    client.should_receive(:show_an_error) 
    client.connect_to_server 
    end 
end 

Bạn có thể tưởng tượng rằng sử dụng rất nhiều mocks hoặc stubbing là một ý tưởng tồi; đây là cơ bản che giấu các phần của mã của bạn trong thử nghiệm của bạn nhưng, đó là một giải pháp dễ dàng cho một số kịch bản thử nghiệm khó/hiếm.

Nhà máy Cô gái hữu ích khi tạo dữ liệu để thử nghiệm. Bạn sẽ sử dụng các nhà máy như công thức để tạo các cá thể cho các mô hình của bạn, bạn có thể cần kiểm tra một thứ gì đó liên quan đến rất nhiều dữ liệu thử nghiệm và đây là một tình huống mà việc sử dụng đồ đạc sẽ không hoạt động và tạo ra các đối tượng phức tạp một cách rõ ràng.

+1

Tôi có thể sai, nhưng tôi nghĩ rằng bạn đang nhầm lẫn trên sơ khai chỉ được trên phương pháp. Bạn có thể có các đối tượng sơ khai hoặc các đối tượng giả, hoặc các phương thức được phân tích hoặc các phương thức giả. Sự khác biệt là cách bạn đang sử dụng chúng.Sơ khai chỉ để có được bài kiểm tra làm việc mà không thực sự gọi một phụ thuộc khác. Mocks làm như vậy nhưng yêu cầu được yêu cầu và một phần của thử nghiệm. Bạn có thể có một đối tượng giả có cả cuống và mocks. Rspec thậm chí còn gọi chúng là "gấp đôi" thay vì giả lập. – fregas

15

dừng chân đầu tiên của bạn là bài báo nổi tiếng Martin Fowler: Mocks are not Stubs

Sửa

MocksStubs là hai trong số các loại Test Doubles (thuật ngữ Mezaros). Kiểm tra đôi thường được sử dụng để mô phỏng các phụ thuộc cần thiết bởi một hệ thống dưới thử nghiệm (hoặc Class Under Test), để SUT/CUT có thể được kiểm tra trong sự cô lập từ phụ thuộc của nó. (Nên biết trước - thuật ngữ chính xác có thể khá một chủ đề ví dụ như nhạy cảm như đã đề cập bởi Jeff here)

Từ wikipedia:

Ví dụ

  • Một cuống phương thức có thể chỉ trả về giá trị không đổi w hen được gọi bởi SUT, ví dụ: để tiến hành một trường hợp thử nghiệm cụ thể của SUT.
  • * Các khung như Mockito (Java) và Moq (.Net) cho phép bạn xây dựng các lớp mô phỏng trên giao diện phụ thuộc nhanh chóng với mã tối thiểu và cung cấp khả năng xác minh rằng SUT tương tác chính xác với mô hình, ví dụ bằng cách kiểm tra rằng SUT đã gọi phương thức của mô hình đúng số lần, với các tham số chính xác.

* Disclaimer - Tôi không phải là dev ruby ​​

+6

Khi bạn đọc điều đó, bạn có thể chuyển sang [Tạo mô hình TDD] (http://avdi.org/devblog/2011/09/06/making-a-mockery-of-tdd/) –

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