2011-11-20 23 views
12

Trong Java thông thường, bạn sẽ tạo hai thư mục nguồn srctest với một hệ thống phân cấp gói giống hệt nhau.Cách thực hành tốt nhất để tổ chức cấu trúc thư mục thử nghiệm Ruby là gì?

Trong Ruby bạn chỉ cần đặt tất cả các bài kiểm tra trong cùng thư mục với lớp đang được kiểm tra? Hay bạn tạo một hệ thống phân cấp tương tự trong một thư mục riêng biệt? Nếu vậy, làm thế nào để bạn quản lý các đường dẫn require trong các bài kiểm tra đơn vị của bạn?

+1

@nash: Đây là nhận xét đầu tiên tôi đọc trên SO mà tôi thấy thô lỗ. –

+2

Xin lỗi, nó thực sự thô lỗ. Tôi sẽ cố gắng tìm ra. Ví dụ, bạn có thể xem thư mục spec rspec ở đây (https://github.com/rspec/rspec-core/tree/master/spec) Những người này thực sự biết cách viết thông số kỹ thuật. Xin lỗi lần nữa. –

Trả lời

8

Lúc đầu, mỗi viên đá quý có bố cục điển hình. Mã gần như hoàn toàn trong lib. Trong thư mục gốc, chỉ có siêu dữ liệu như README, tệp gemspec và một số dữ liệu cấu hình tùy chọn. Nếu bạn viết một ứng dụng web có thứ gì đó như Rails hoặc Sinatra, thì các tiêu chuẩn bố cục của chúng sẽ được sử dụng thay vào đó,

Trong tất cả các loại dự án đó, các thử nghiệm có thể được tìm thấy ở các vị trí tương tự. Tùy thuộc vào khung kiểm tra bạn sử dụng, có các tiêu chuẩn khác nhau.

Nếu bạn sử dụng Test::Unit, các thử nghiệm nằm trong thư mục test. Không có tiêu chuẩn thực sự về cách thực sự tổ chức các tệp thử nghiệm trong thư mục đó. Cá nhân tôi thấy nó hữu ích cho ít nhất một phần phản ánh bố cục tệp của mã được thử nghiệm. Nếu bạn sử dụng các mô-đun/không gian tên rộng rãi, điều đó sẽ làm cho nó dễ đọc hơn.

Nếu bạn sử dụng RSpec, các kiểm tra (sau đó gọi là thông số kỹ thuật) đi vào một thư mục spec. Các ghi chú ở trên về bố cục của các thử nghiệm thực tế cũng áp dụng ở đây.

Cuối cùng, chủ yếu là quyết định của nhà phát triển cách thiết lập thử nghiệm của bạn. Như các bài kiểm tra là một lĩnh vực mà bất kỳ người nào có ý kiến ​​khác nhau (và chuỗi), không có con đường thiêng liêng để thành công. Bạn nên xem xét một số đá quý bạn sử dụng và cách chúng hoạt động. Ví dụ về Kiểm tra :: Bố cục đơn vị có thể được tìm thấy trong đá quý Rails, ví dụ: cho ActiveRecord. Ví dụ về kiểm tra RSpec là plugin chiliproject_backlogs cho ChiliProject.

+0

Cảm ơn bạn đã trả lời kỹ lưỡng! Tôi nhận thấy thường có một 'spec_helper' có chứa các phụ thuộc trong các dự án rspec. –

+0

Để rõ ràng, đá quý của bạn sẽ có thư mục '\ lib' và' \ test'. – ashes999

0

Tôi cũng mới sử dụng Ruby và tự hỏi cùng một câu hỏi. Phần tôi đã không nhận được là làm thế nào để tổ chức chúng theo thứ bậc để phù hợp với một tổ chức có khả năng phân cấp của các thành phần trong thư mục lib, và sau đó chạy chúng tất cả như một bộ.

Tôi đã không được Googling lâu, nhưng phát hiện của tôi đã mỏng hơn dự kiến. Điều hữu ích nhất mà tôi đã tìm thấy là điều này từ ruby wiki:

trường hợp thử nghiệm lớp học có thể được thu thập lại với nhau thành dãy phòng thử nghiệm mà là các tập tin Ruby mà đòi hỏi phải trường hợp thử nghiệm khác:

# File: ts_allTheTests.rb
require 'test/unit'
require 'testOne'
đòi hỏi
require 'testThree'

Bằng cách này, các trường hợp thử 'testTwo' liên quan có thể được nhóm lại một cách tự nhiên. Hơn nữa, các bộ thử nghiệm có thể chứa các bộ thử nghiệm khác, cho phép xây dựng một hệ thống phân cấp thử nghiệm.

Trước đây, tôi đã tránh các thư mục con trong thư mục thử nghiệm của tôi và làm một cái gì đó như thế này trong Rakefile của tôi, hoặc bất kỳ tập tin ruby ​​mà thực sự thực hiện các bài kiểm tra:

$LOAD_PATH << File.dirname(__FILE__) 
require 'test/unit' 
Dir.glob('test/test_*', &method(:require)) 

Vì vậy, nếu tôi kết hợp hai kỹ thuật , Tôi sẽ có một tập tin cho mỗi thư mục tự động yêu cầu kiểm tra từ thư mục đó, mà lần lượt sẽ được yêu cầu bởi các tập tin cho thư mục mẹ. Nhưng điều này dường như đánh bại nỗ lực ban đầu của tôi để tránh tedium.

Sau đó, tôi tìm thấy someclasses trong ruby-doc nghe có vẻ phù hợp nhưng không được ghi lại. Tuy nhiên, có vẻ như có thêm thông tin có sẵn trở lên cho Test::Unit mà tôi có thể dễ dàng bỏ qua. Tôi chưa đọc tất cả, nhưng có vẻ đầy hứa hẹn.

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