2012-09-18 31 views
47

Tôi vừa xem một số Railscast cho Minitest.Minitest và Rspec

Ưu và nhược điểm của việc sử dụng RSpec vs Minitest để thử nghiệm ứng dụng đường ray là gì? Tôi sẽ mất những tính năng nào để chuyển đổi từ RSpec sang Minitest?

+0

Xem ví dụ: http://stackoverflow.com/questions/8423227/migrating-from-rspec-to-minitestspec – matt

+0

Có lẽ 2 câu hỏi này nên được hợp nhất, có cách nào để kết hợp các câu hỏi không? –

+10

Đóng với +12 phiếu bầu !!! bỏ phiếu để mở. –

Trả lời

69

Tôi là một trong những nhà phát triển RSpec và chưa bao giờ sử dụng minitest, vì vậy hãy xem xét các thành kiến ​​của tôi khi đọc câu trả lời này.

Bởi và lớn, sức mạnh của RSpec xuất phát từ thực tế là nó tái cấu trúc rất nhiều thử nghiệm thành các đối tượng lớp học đầu tiên. Trong đó Test :: Unit và Minitest sử dụng các phương thức đơn giản để tạo các xác nhận, RSpec sử dụng các đối tượng matcher lớp đầu tiên hỗ trợ phủ định, tự mô tả và hơn thế nữa. Ví dụ của RSpec là các đối tượng hạng nhất hỗ trợ siêu dữ liệu phong phú; biên dịch minitest/spec it chặn các phương thức đơn giản, không hỗ trợ cùng một loại siêu dữ liệu phong phú. RSpec hỗ trợ xác định các hành vi được chia sẻ bằng cách sử dụng một cấu trúc hạng nhất (các nhóm ví dụ được chia sẻ) chấp nhận các đối số; w/minitest bạn có thể sử dụng inheritance or a mixin to re-use tests, nhưng nó không có cùng loại hỗ trợ hạng nhất. RSpec có một API định dạng rõ ràng (và có rất nhiều trình định dạng của bên thứ ba sử dụng nó); Tôi không biết về minitest có cùng một loại API định dạng hạng nhất.

Là một người luôn chạy thử nghiệm và thực hành TDD cả ngày, tôi thấy công cụ RSpec cung cấp cho tôi rất hữu ích. Tuy nhiên, nhiều người cho rằng nó là quá mức cần thiết và có thêm chi phí nhận thức cho việc trừu tượng hóa thêm.

Dưới đây là một số tính năng cụ thể RSpec có mà tôi tin minitest thiếu:

  • before(:all) móc (lưu ý đây là một tính năng sử dụng sức mạnh của RSpec rằng hiếm nên được sử dụng, tôi đã chỉ được sử dụng nó trên một vài lần trong nhiều năm sử dụng RSpec)
  • around(:each) móc
  • nhóm dụ Shared
  • Shared ngữ cảnh
  • hỗ trợ siêu dữ liệu giàu mà có thể là u sed để kiểm soát các ví dụ nào được chạy, ví dụ các nhóm được chia sẻ các ngữ cảnh được đưa vào, ví dụ: các mô-đun nhóm được trộn lẫn và nhiều hơn nữa.
  • Hỗ trợ tích hợp cho nhiều tính năng chế nhạo w/rspec-mocks; Minitest :: Mock đơn giản hơn nhiều và hạn chế hơn.
  • RSpec có rspec-fire, điều này thật tuyệt vời.

Lợi ích của việc sử dụng Minitest:

  • Nó được xây dựng vào các thư viện chuẩn, do đó bạn không cần phải cài đặt bất cứ điều gì thêm.
  • Nó có thể được sử dụng trong các kiểu def test_blah hoặc it 'blah'.
  • Cơ sở mã rất nhỏ và đơn giản. RSpec, do tuổi già và các tính năng bổ sung của nó, là lớn hơn trong so sánh.
  • Tải tối thiểu nhanh hơn RSpec (khoảng 4 tệp mã so với RSpec có nhiều tệp trải rộng trên 3 đá quý) - nhưng lưu ý rằng RSpec không hề chậm; trong hầu hết các dự án của tôi trong những ngày này, tôi nhận được phản hồi từ RSpec dưới một giây (và thường dưới 500 mili giây).

Nhìn chung, nó hơi giống Sinatra vs. Rails và tôi nghĩ Minitest và RSpec đều là lựa chọn tốt tùy theo nhu cầu của bạn.

Một điều cuối cùng: nếu có những khía cạnh cụ thể của Minitest bạn thích hơn, nhưng những thứ khác bạn thích hơn về RSpec, chúng có thể dễ dàng được trộn lẫn và khớp. Tôi wrote a blog post about this, nếu bạn quan tâm.

+0

Cảm ơn lời giải thích tuyệt vời. –

+2

Hãy nhớ rằng nếu muốn tích hợp MiniTest với Spork, Guard, Capybara, và bất kỳ loại trình điều khiển Javascript nào, bạn có thể lên kế hoạch chi tiêu cả tuần để tìm ra nó và ổn định. MiniTest chưa sẵn sàng cho thời gian vàng khi nói đến việc có một bài kiểm tra hoàn chỉnh cho bất cứ thứ gì, nhưng là ứng dụng thô sơ nhất của Rails. Tôi đã cho nó các trường đại học cũ cố gắng bản thân mình nhưng nó chỉ kết thúc trong thất vọng. – AKWF

4

Tôi đã chuyển đổi thành kiểu thông số tối thiểu từ Test/Unit với shoulda và trả tiền. Nó đi với boilerplate và họ nói nó cũng cải thiện tốc độ. Tôi chưa bao giờ thực sự sử dụng RSpec. Thay vào đó, tôi đã viết thử nghiệm nguyên thủy của riêng tôi và khuôn khổ mocking (chỉ với mục đích hiểu mocking, tôi đã bỏ nó khi chuyển sang Minitest). Tôi nghĩ rằng stubbing/mocking trong RSpec có thể là nâng cao hơn, vì vậy nếu bạn đã học được nó, chỉ cần tiếp tục sử dụng nó. Nếu không, hãy liên kết với Minitest, điều này sẽ cho phép bạn cộng tác với những người không biết gì về RSpec, chẳng hạn như tôi.

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