2009-07-28 20 views
11

Hai phần giới thiệu với phần giới thiệu nhanh. Giới thiệu: Tôi đến với Ruby từ Perl, và tôi đã mất một chút trong số các lựa chọn khung kiểm tra. Tôi hiểu rằng có lẽ không có sự lựa chọn nào tốt nhất, tất cả xung quanh tốt nhất là, nhưng tôi thậm chí không thể có được hình ảnh rõ ràng về sân chơi.Có sự đồng thuận về khung kiểm tra cho Ruby 1.9.x không?

Vì vậy, trước tiên, MiniTest hoặc Test :: Unit? Tôi vừa mới nhận ra rằng 1.9.1 mặc định là MiniTest. Tôi đã không nhận thấy vì tất cả các bài kiểm tra cũ hơn :: Bài hướng dẫn đơn vị vẫn hoạt động tốt. Nếu bạn require test/unit, bạn thực sự có được MiniTest như một thử nghiệm :: Đơn vị giả lập (!). Suy nghĩ ban đầu của tôi là đi với sự lựa chọn mặc định của MiniTest (một khi tôi biết nó đã có), nhưng ngay cả những cuốn sách rất gần đây dường như không quan tâm đến việc dạy nó. Thực tiễn tốt nhất của Ruby nói "Có sự khác biệt đáng kể" giữa hai loại, nhưng anh chọn không xử lý chúng. Ông cũng chạy tất cả các bài kiểm tra của mình thông qua Test :: Unit (cộng với một số add-on tùy chỉnh). Pickaxe mới cũng có rất ít thông tin về MiniTest mỗi se và trong chương thử nghiệm, họ cũng sử dụng phiên bản thi đua :: Đơn vị thi đua của MiniTest. Để làm rõ câu hỏi đầu tiên của tôi thì: MiniTest có phải là lựa chọn đầu tiên không? Tôi có nên mặc định sử dụng trình mô phỏng Test :: Unit không?

Thứ hai, ngoài các tùy chọn được tích hợp sẵn, có Rspec, Công ty dưa chuột & để kiểm tra hành vi. Cộng đồng có nghiêng mạnh về phong cách này và khuôn khổ này không? Tôi có nên bắt đầu với Rspec không?

Tôi sẽ chơi một chút với cả ba, nhưng tôi tò mò muốn biết loại đồng thuận nào (nếu có) đang hình thành xung quanh thử nghiệm trong Ruby 1.9.

(Theo dõi nhanh, như lời nhắc cho chính mình và cho bất kỳ ai quan tâm. Xem this link để biết tổng quan hữu ích về các lời gọi khác nhau cho Thử nghiệm :: Đơn vị và MiniTest trong các Hồng ngọc 1.8 đến 1.9.1.)

Trả lời

6

Có sự đồng thuận không? Tôi muốn nói không. Có một giọng nói cộng đồng mạnh mẽ để sử dụng TDD/BDD nhưng thậm chí sau đó nó không phải là phổ quát. Khuôn khổ có lẽ ít quan trọng hơn việc áp dụng thực hành ngay từ đầu.

Tôi tin rằng minitest là 1.9 thay thế cho Test :: Unit, chỉ tồn tại dưới dạng trình bao bọc quanh thư viện mới để tương thích ngược. Tôi đoán rằng việc đi theo con đường cụ thể của minitest sẽ hướng tới tương lai hơn.

RSpec là một sự khác biệt đôi chút: ít rõ ràng được truyền tải bởi các khung công tác "truyền thống" xUnit. Đó là giá trị chi tiêu một số thời gian với để xem nếu bạn thích nó.

Ngoài ra còn có Shoulda. mặc dù tôi không biết làm thế nào thử nghiệm nó là trên 1.9: nó là nhiều hơn của một wrapper/mở rộng cho Test :: Unit, do đó, nó có thể sẽ làm việc, mặc dù.

Tất nhiên niềm vui không dừng lại ở đó: một khi bạn đã chọn một khung kiểm tra, bạn sẽ muốn có một động cơ giả mạo của một số loại. Hoặc thay thế vật cố dữ liệu.

Trong mọi trường hợp, tôi muốn nói bất kỳ khuôn khổ nào bạn có thể tìm thấy bằng chứng về cập nhật thường xuyên, cộng đồng dân cư mở và API bạn không ghét sẽ thực hiện công việc. Nó không chắc rằng bạn sẽ bị bắn hạ sau này vì đã thực hiện bất kỳ sự lựa chọn bạn làm.

+1

Shoulda không phải là một ý tưởng hay tại thời điểm này. Các đối sánh RSpec hoặc Minitest là 'chứng minh trong tương lai' hơn. Chúng tôi chỉ di chuyển ứng dụng của chúng tôi từ Shoulda đến Minitest và nó cũng có giá trị nó. –

7

Tôi đã sử dụng Rspec trong một năm. Tôi đã chuyển từ bài kiểm tra :: Đơn vị đặc biệt vì tôi có thể in theo cách có thể đọc được của con người những gì đang được thử nghiệm.

Nó đọc như văn xuôi. Đó là lớn cộng với tôi. Nhưng như với tất cả các kết quả sẽ khác nhau.

describe Model do 
    it "should do what I want" do 
    this.should == that 
    it.should be_nil 
    that.should_not be_true 
    end 
end 

Cũng không có khung kiểm tra, bạn cũng nên nghĩ về công cụ phủ sóng như RCov. Nó tích hợp với rspec và sẽ cho bạn biết mã của bạn thiếu kiểm tra ở đâu.

+0

Cảm ơn mẫu (để đưa ra hình ảnh Rspec đang hoạt động) và đề xuất RCov. – Telemachus

+2

Trong Ruby 1.9, MiniTest/Spec tích hợp sử dụng đồng bộ giống nhau, và có lợi thế (khi bạn có nhiều thử nghiệm) chạy nhanh hơn đáng kể – cczona

3

Cá nhân tôi perfer rspec. Tôi thấy rằng việc tập trung các bài kiểm tra của mình vào hành vi thực sự đã giúp tôi vượt qua những gì tôi đang cố gắng làm.

Với rspec go và nhận được một cái gì đó như Factory Girl hoặc Machinist để tạo ra dữ liệu thử nghiệm của bạn, không sử dụng đồ đạc.

Đối với những gì Mike nói, dự án rspec khá tích cực với các phiên bản mới được phát hành bình thường với mỗi phiên bản đường ray để giúp nó theo kịp với sự phát triển của khung công tác.

+0

Cảm ơn bạn đã đề xuất. Tôi phải là một trong số ít, nhưng tôi quan tâm đến Ruby cho Ruby. Tôi không quan tâm đến Rails chỉ vì tôi không quan tâm đến các ứng dụng web. Có nói rằng, một _ton_ hoạt động cho một khuôn khổ thử nghiệm có thể không phải là một điều tốt. Hoặc ít nhất, tôi không muốn liên tục học lại cách hoạt động của nó. Tuy nhiên, tôi sẽ kiểm tra Rspec. – Telemachus

+0

Hãy kiểm tra. Bạn có thể sử dụng rspec để kiểm tra/spec bất cứ điều gì bạn viết trong ruby, và đó là một cách tuyệt vời để đi ngay cả khi bạn không bao giờ chạm vào đường ray. – nitecoder

4

RSpec là sự đồng thuận của các cuốn sách Rails phổ biến như "The Rails Way". Ưu điểm IMHO là các bài kiểm tra đọc như tiếng Anh, các định dạng đầu ra đọc như tiếng Anh và các trình so khớp trực tuyến. Nhược điểm là tốc độ chậm và thư viện đôi khi cảm thấy "huyền diệu" tức là quá xa với những người lập trình quen thuộc hơn với Ruby và các bài kiểm tra đơn vị. RSpec cũng cung cấp Cucumber và Gherkin, đó là những cách để viết những câu chuyện của người dùng là sự chấp nhận của khách hàng hữu ích.

MiniTest được tích hợp vào Ruby 1.9. Ưu điểm IMHO là tốc độ nhanh, rất dễ đọc/ghi cho các lập trình viên của các ngôn ngữ khác và các bài kiểm tra sử dụng cùng một kiểu mã mà bạn sử dụng trong mã thực của mình. MiniTest có nhiều thứ hơn hầu hết mọi người biết, ví dụ MiniTest Spec có các đối sánh BDD giống với RSpec, MiniTest Mock là hệ thống chế nhạo và MiniTest Benchmark là dành cho hồ sơ hiệu suất.

Theo kinh nghiệm cá nhân của tôi, những người xây dựng ứng dụng Rails có xu hướng hướng tới RSpec và những người xây dựng mã Ruby thuần túy có xu hướng hướng tới MiniTest Unit, Spec, Mock, Benchmark, v.v.

1

RSpec rất hay nhưng tôi nghĩ gần đây đã có rất nhiều cuộc trò chuyện và chuyển động phía sau Minitest đi kèm với Ruby 1.9.x. Nó có rất nhiều tính năng của RSpec nhưng lại gọn gàng hơn và súc tích hơn.

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