Tôi khá mới đối với rspec và toàn bộ phương pháp TDD. Ai đó có thể vui lòng giải thích sự khác biệt giữa giả và sơ khai. Khi nào chúng ta sử dụng chúng và khi nào chúng ta sử dụng Factory Girl để tạo ra các đối tượng trong các trường hợp thử nghiệm?Sự khác biệt giữa giả lập, sơ khai, và cô gái nhà máy là gì?
Trả lời
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.
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
Mocks
và Stubs
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:
- "Test stubs provide canned answers"
- "mock objects can simulate the behavior of complex, real objects"
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
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/) –
- 1. Nhà máy Cô gái/Capybara xóa hồ sơ khỏi cơ sở dữ liệu giữa kiểm tra?
- 2. Rails 3.1, lỗi nhà máy cô gái
- 3. nhà máy cô gái nhiều has_many qua là
- 4. Im lặng Nhà máy Cô gái đăng nhập
- 5. nhà máy cô gái xác nhận tính độc đáo không cho các nhà máy liên
- 6. nhà máy sản xuất cô gái lồng nhau
- 7. Thuộc tính phụ thuộc trong Nhà máy Cô gái
- 8. Trong RSpec, sự khác biệt giữa cuống! và sơ khai?
- 9. Sự khác biệt giữa mẫu mặt tiền và mẫu nhà máy abstarct là gì?
- 10. Kiểm tra cuộc gọi lại trước_s_save với Rspec và Nhà máy Cô gái
- 11. Sự khác biệt giữa lập trình khai báo và bắt buộc là gì?
- 12. Sự khác biệt giữa móc và gọi lại là gì?
- 13. RSpec và nhà máy cô gái SystemStackError: ngăn xếp mức quá sâu
- 14. Sự khác biệt giữa is_a và instanceof là gì?
- 15. Sự khác biệt giữa Request.ServerVariables ["REMOTE_ADDR"] và Request.UserHostAddress là gì?
- 16. Sự khác biệt giữa lập trình đa lõi trong Erlang và ngôn ngữ khác là gì?
- 17. Sự khác biệt trong phương pháp OCMock mong đợi và sơ khai là gì?
- 18. Sự khác biệt giữa Khai thác thông tin và Khai thác văn bản là gì?
- 19. Sự khác biệt giữa ASP.NET và C# là gì?
- 20. Sự khác biệt giữa "1.0f" và "1.f" là gì?
- 21. Sự khác biệt giữa engine.io và socket.io là gì?
- 22. Sự khác biệt giữa tệp * .bat và * .cmd là gì?
- 23. Sự khác biệt giữa RadGrid.Rebind() và RadGrid.MasterTableView.Rebind() là gì?
- 24. Sự khác biệt giữa setDisplayHomeAsUpEnabled và setHomeButtonEnabled là gì?
- 25. Unix: Sự khác biệt giữa nguồn và xuất là gì?
- 26. Sự khác biệt giữa chẩn đoán và metaheuristics là gì?
- 27. Sự khác biệt giữa ASP.NET và ASP.NET MVC là gì?
- 28. SQLAlchemy: Sự khác biệt giữa flush() và commit() là gì?
- 29. Sự khác biệt giữa while (true) và loop là gì?
- 30. Sự khác biệt giữa Kiến trúc Máy tính và Tổ chức Máy tính là gì?
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