Tôi nhận thấy rằng rất nhiều người thích Mocha hơn khung xây dựng mô phỏng của RSpec. Ai đó có thể giải thích những lợi thế của Mocha, hoặc bất kỳ thay thế, hơn RSpec được xây dựng trong một khuôn khổ mocking?Ưu điểm của Mocha trên khung công tác mô phỏng được xây dựng của RSpec là gì?
Trả lời
Một tính năng cụ thể mà tôi thực sự thích là có thể phân tích tất cả các phiên bản của một lớp. Rất nhiều lần tôi làm điều gì đó như sau với RSpec chế giễu:
stub_car = mock(Car)
stub_car.stub!(:speed).and_return(100)
Car.stub!(:new).and_return(stub_car)
với Mocha đó trở thành:
Car.any_instance.stubs(:speed).returns(100)
Tôi tìm thấy phiên bản Mocha rõ ràng hơn và rõ ràng hơn.
Tôi dùng một mocha vì tôi không sử dụng rspec. Tôi sử dụng thử nghiệm/đơn vị, và thử nghiệm/đơn vị không có stubbing và chế nhạo được xây dựng trong.
[Rspec-mocks] (https://github.com/rspec/rspec-mocks) hiện là một dự án độc lập có thể được sử dụng trong bất kỳ dự án không thuộc Rspec nào. –
Theo như tôi biết Mocha hỗ trợ Double Injections (aka Partial Mocking, cũng được hỗ trợ trong rr), không chắc chắn rằng RSpec cũng hỗ trợ tính năng này.
Ngoài ra, đối với những người thích chuyển đổi giữa các khung kiểm tra, Mocha là giải pháp phổ dụng áp dụng cho Test/Unit, Shoulda, v.v. Sử dụng RSpec mocking với tất cả các libs này sẽ là quá mức cần thiết.
[Rspec-mocks] (https://github.com/rspec/rspec-mocks) hiện là một dự án độc lập có thể được sử dụng trong bất kỳ dự án không thuộc Rspec nào. –
của Ruby chế giễu các khuôn khổ đã phát triển rất nhiều kể từ khi câu hỏi này đã được hỏi trong năm 2009. Vì vậy, đây là một chút 2013 so sánh:
Expectations
- với RSpec-mocks:
expect(user).to receive(:say_hello)
- với Mocha:
user.expects(:say_hello).once
Stubbing một đối tượng
- với RSpec-mocks:
user = double(name: 'John Doe')
- với Mocha:
user = stub(name: 'John Doe')
Stubbing bất cứ điều gì
- với RSpec-mocks:
User.any_instance.stub(:name).and_return('John Doe')
- với Mocha:
User.any_instance.stubs(:name).returns('John Doe')
Chúng cung cấp cùng một cơ sở và cả hai đều có thể được sử dụng có hoặc không có Rspec.
Vì vậy, tôi muốn nói lựa chọn cái khác là một vấn đề về sở thích cá nhân (và chúng có hương vị hoàn toàn giống nhau).
Vô cùng hữu ích khi có một số so sánh cụ thể, +1 –
- 1. Ưu điểm của Apache Wicket là gì?
- 2. Ưu và khuyết điểm của Mô hình neo là gì?
- 3. Ưu điểm của QAbstractItemModel trên QStandardItemModel là gì?
- 4. Ưu điểm của LePUS3 trên UML là gì?
- 5. Điểm của việc sử dụng khung công tác Ghi nhật ký là gì?
- 6. ứng dụng iPhone được xây dựng để mô phỏng, sẽ không xây dựng với thiết bị
- 7. Ưu điểm của MongoDB trên MySQL và PostgreSQL là gì?
- 8. Ưu điểm của NSBinaryStoreType là gì?
- 9. Ưu điểm/nhược điểm của khung, thư viện và gói Cocoa là gì?
- 10. Các khung công tác web lớn hiện nay là gì?
- 11. Có một khung công tác GUI sử dụng HTML và CSS để xây dựng GUI không?
- 12. Ưu điểm/nhược điểm của .NET 64 bit là gì?
- 13. Ưu điểm của concurrent.futures trên đa xử lý trong Python là gì?
- 14. Ưu điểm/nhược điểm của việc sử dụng bộ ria mép với Backbone.js là gì?
- 15. Mô phỏng tác vụ nền trên AppHarbor
- 16. Ưu điểm và nhược điểm của NHibernate
- 17. Ưu điểm của việc sử dụng sai sót là gì?
- 18. Ưu điểm của việc sử dụng các đặc điểm trên các lớp trừu tượng là gì?
- 19. Ưu điểm của việc sử dụng Automapper là gì?
- 20. Gỡ lỗi khung công tác trên Android trong Eclipse
- 21. Làm cách nào để loại trừ các khung trong trình mô phỏng xây dựng trong Xcode
- 22. Xcode 4.6 được xây dựng, chạy và kết thúc ngay lập tức (mô phỏng iOS 6.1)
- 23. Ưu điểm của tệp ánh xạ bộ nhớ là gì?
- 24. Ưu điểm của việc tải DLL động là gì?
- 25. Ưu điểm của việc sử dụng ExecutorService là gì?
- 26. Tương đương LinkedList trong khung công tác iOS là gì?
- 27. Ưu điểm của Clojure
- 28. Ưu điểm của Tesla trên GeForce
- 29. Những lợi thế của việc sử dụng Django insead của khung công tác web mặc định của ứng dụng là gì?
- 30. Có lợi thế nào khi xây dựng ứng dụng .NET của tôi với khung công tác 64 bit không?
any_instance có lẽ là * lý do * để sử dụng Mocha. Nó cực kỳ mạnh mẽ và có thể tiết kiệm rất nhiều thời gian. –
Bạn có thể thực hiện việc này với RSpec 2 ngay bây giờ: https: //www.relishapp.com/rspec/rspec-mocks/tài liệu/phương pháp-stubs/stub-on-any-instance-of-a-class –
Có, câu trả lời này đã lỗi thời. Có thể "bỏ chọn" không? –