2009-09-10 27 views

Trả lời

30

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.

+1

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. –

+19

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 –

+3

Có, câu trả lời này đã lỗi thời. Có thể "bỏ chọn" không? –

3

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.

+1

[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. –

4

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.

+1

[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. –

36

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).

+1

Vô cùng hữu ích khi có một số so sánh cụ thể, +1 –

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