2008-09-21 18 views
33

Tôi đang thiết lập một ứng dụng đường ray và tôi vừa hoàn thành một số bài kiểm tra đơn vị và bạn tôi nói rằng đồ đạc rõ ràng không còn mát mẻ nữa và mọi người hiện đang sử dụng RSpec hoặc shoulda. Tôi đã tự hỏi những lợi ích thực tế là sử dụng các bộ công cụ khác. Bất kỳ thông tin nào đều được đánh giá cao.Tại sao tôi nên sử dụng RSpec hoặc shoulda với Rails?

-fREW

Trả lời

17

RSpec và các khuôn khổ tương tự là công cụ được thiết kế để hỗ trợ trong Phát triển dựa trên hành vi. Họ không chỉ là một cách dễ dàng hơn để viết các bài kiểm tra, mặc dù họ giúp đỡ với điều đó.

Có rất nhiều thông tin về BDD ở đây: http://behaviour-driven.org/ Và wikipedia: http://en.wikipedia.org/wiki/Behavior_Driven_Development

Có quá nhiều lợi ích cho liệt kê ở đây, vì vậy tôi khuyên bạn nên xem trang web đó một chút.

4

RSpec là cách mạnh mẽ hơn bởi vì nó dễ dàng hơn để đọc và viết các bài kiểm tra trong. Nó cũng rất thanh lịch khi sử dụng mocks và cuống, một khái niệm mà sẽ trở nên cực kỳ hữu ích khi bạn bắt đầu sử dụng chúng trong thử nghiệm của bạn. Hãy thử nó trong một ứng dụng thử nghiệm đơn giản (NON RAILS!) Và bạn sẽ thấy thông số kỹ thuật của bạn thanh lịch như thế nào so với thử nghiệm tiêu chuẩn tương đương.

22

Cá nhân tôi thích Shoulda để RSpec. Tôi thấy rằng Shoulda có ít cú pháp ma thuật hơn RSpec. Vấn đề của tôi với RSpec là vâng nó rất dễ đọc khi tôi đọc to lên, nhưng khi tôi viết nó, hmmmm, tôi không bao giờ chắc chắn làm thế nào một xác nhận đã cho nên được viết. Prag Dave explains the problem better than me. Ông cũng likes Shoulda và có một vài ví dụ.

+1

Tôi hoàn toàn đồng ý với webmat. Tôi thực sự đấu tranh với sự hiểu biết cú pháp RSpec bởi vì nó có quá nhiều cú pháp. Nó biến các cụm từ thông thường thành mã nhưng sau đó bạn đã tìm ra những gì nó được cho là phải làm! Đường cong dốc và tôi lười. – srboisvert

+0

Tôi từng hơi nghi ngờ về cú pháp có đường quá, nhưng sau khi đọc http://rdoc.info/gems/rspec-expectations/2.4.0/RSpec/Matchers Tôi thực sự không gặp rắc rối khi viết xác nhận của mình Cú pháp của RSpec. (Có lẽ tài liệu đơn giản trở nên tốt hơn trong 2.5y kể từ câu trả lời của bạn ^^) Thực tế, bây giờ tôi thích sự mong đợi của RSpec tốt hơn Test :: Unit's assertions (và điều đó vẫn không quan tâm đến "khả năng đọc tiếng Anh" -)đặc tính). –

7

Có hai điều khác nhau ở đây:

Điều đầu tiên là sử dụng khuôn khổ nào để viết kiểm tra/thông số kỹ thuật. Ở đây bạn có thể lựa chọn giữa Test :: Unit, RSpec, Shoulda và vân vân. Sự lựa chọn là liệu bạn có muốn làm TDD truyền thống (Test :: Unit) hay bạn thích cách thay thế suy nghĩ về hành vi cụ thể được các nhà phát triển ủng hộ như David Chemlinsky (RSpec và ở một mức độ nào đó).

Điều thứ hai là cách xử lý dữ liệu thử nghiệm. Có các đồ đạc và lựa chọn thay thế của Rails được xác định với các mục tiêu khác như the FixtureReplacement plugin. Trước khi các đồ đạc của Rails 2.0 có các vấn đề thực tế quan trọng và được ghi chép đầy đủ. Nhiều vấn đề thực tế đã được sửa trong Rails 2.0. Tuy nhiên đồ đạc có thể dẫn đến khớp nối thử nghiệm vô ý và một số lựa chọn thay thế cố gắng tránh điều này.

2

Nếu bạn đang xây dựng một ứng dụng lớn và không có một đội ngũ thực sự giỏi viết mã được tách rời có thể được kiểm tra tốt bằng các thử nghiệm hộp đen và chuẩn bị để sử dụng/gỡ lỗi rất nhiều mocks & khai, không đi xuống đường Nhà máy.

Bất cứ nơi nào bạn đọc về cách các nhà máy tuyệt vời Bạn sẽ thấy một chút cảnh báo về cách các nhà máy có thể không khả thi trong một ứng dụng lớn vì chúng chậm hơn một chút so với đồ đạc.

Nhưng "chậm hơn một chút" thực sự là đơn đặt hàng của cường độ chậm hơn.

Các nhà máy không dễ viết mã dễ dàng hơn so với đồ đạc sử dụng nhãn cho id, miễn là bạn giữ đồ đạc được sắp xếp. Và trong một số trường hợp, các nhà máy khó gỡ lỗi hơn.Chỉ cần tối nay tôi đã chuyển đổi một nhà máy duy nhất thành đồ đạc và thời gian chạy của tệp thử nghiệm đã sử dụng từ 65 giây đến 15 giây, mặc dù chỉ có khoảng 15% thử nghiệm trong tệp thử nghiệm đó sử dụng nhà máy đó.

Nếu bạn sử dụng minitest, bạn có thể chạy thử nghiệm theo thứ tự ngẫu nhiên; điều này sẽ nhanh chóng tiết lộ bất kỳ sự ghép nối dữ liệu giữa các bài kiểm tra. (không chắc chắn nếu rspec có tùy chọn để ngẫu nhiên hóa thứ tự kiểm tra)

1

Kiểm tra :: Đơn vị tốt cho các ứng dụng nhỏ. Nhưng có rất nhiều lợi ích khi sử dụng các khung kiểm thử như Shoulda hoặc RSpec, e. g. bối cảnh !!

Tôi không thấy Shoulda và RSpec trong một hoặc quan hệ. Tôi sử dụng Shoulda như là một thay thế cho RSpec khi nói đến thử nghiệm xác nhận đơn. Tôi thực sự thích một lớp lót của Shoulda, nhưng việc viết các trình ghép nối dễ dàng hơn nhiều trong RSpec. Vì vậy, lời khuyên của tôi là sử dụng các công cụ kiểm tra khác nhau, nơi chúng phù hợp nhất.

0

Bạn có thể sử dụng khung kiểm tra như Dưa chuột thậm chí còn nhanh hơn RSpec ..

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