2008-11-13 35 views
16

Tôi đang viết một chương trình ruby ​​thực hiện một số tiện ích dòng lệnh bên ngoài. Làm thế nào tôi có thể thử hệ thống tập tin từ các thử nghiệm rspec của tôi để tôi có thể dễ dàng thiết lập một số hệ thống phân cấp tệp và xác minh nó sau khi thử nghiệm. Nó cũng sẽ là tốt nhất để được thực hiện trong ram để kiểm tra sẽ chạy một cách nhanh chóng.Hệ thống tập tin giả trong thử nghiệm tích hợp

Tôi nhận thấy rằng tôi không thể tìm thấy giải pháp di động vì tiện ích bên ngoài của tôi là các chương trình gốc tương tác trực tiếp với các dịch vụ tệp hệ điều hành. Linux là nền tảng chính của tôi và giải pháp cho điều đó là đủ.

Trả lời

8

Có lẽ điều này sẽ không trả lời câu hỏi của bạn trực tiếp, nhưng trong những trường hợp như vậy, tôi có xu hướng tạo một thư mục tạm thời trong khi thiết lập thử nghiệm và xóa nó trên teardown. Tất nhiên bạn cũng phải đảm bảo ứng dụng ghi vào thư mục tạm thời này. Tôi luôn luôn có một tùy chọn cấu hình xác định thư mục đích mà tôi có thể ghi đè lên trong quá trình thử nghiệm.

Khi nói đến xác nhận tôi sử dụng đồng bằng File.exist? hoặc File.directory?, nhưng tất nhiên bạn có thể tạo trình bao bọc của riêng bạn xung quanh nó. Nếu bạn cần một số trạng thái ban đầu, bạn có thể xây dựng một thư mục có thể được sử dụng như một vật cố định và sẽ được sao chép vào direcory tạm thời trong khi thiết lập thử nghiệm.

+0

Điều này có thể hoạt động với hệ thống tệp ramdisk, nhưng tôi đang tìm kiếm một số giải pháp nâng cao hơn. – JtR

+0

Bạn tạo thư mục tạm thời ở đâu? Có an toàn để tạo và xóa/tmp/my_test_dir không? –

5

Bạn có thể tạo một tệp lớn (kích thước đĩa giả) và gắn kết tệp dưới dạng loop-back device. Bạn có thể tạo bất kỳ cấu trúc thư mục và hệ thống tệp nào trên thiết bị này.
Bạn có thể tạo 2 trong số chúng và tạo sự khác biệt đơn giản so sánh để đảm bảo tính toàn vẹn dữ liệu sau khi kiểm tra.
Tôi hy vọng tôi hiểu các yêu cầu của bạn một cách chính xác vì tôi không chắc tại sao giải pháp ramdisk đơn giản lại không đủ tốt.
This cũng có thể có liên quan.

+0

Chết tiệt, đây là một câu trả lời thực sự geeky, nhưng có lẽ không phải cho hầu hết các Rubyists. Tuy nhiên, nó sẽ hoạt động. Tôi sẽ bỏ phiếu cho yếu tố đam mê. :-) –

+0

Tôi sẽ coi đây là lời khen :) – Ilya

+0

Bạn có thể thực hiện chủ đề này thêm một bước nữa với unionfs: http://en.wikipedia.org/wiki/UnionFS – Frobbit

36

Bạn đã xem FakeFS hoặc MockFS ?

Lưu ý: Liên kết gốc đến MockFS không hoạt động. Nó looks like nó không còn được duy trì.

+0

Không, tôi không, cảm ơn! – JtR

+0

Đẹp - Tôi chưa thử nó, nhưng đây chính xác là những gì tôi đang tìm kiếm ... –

+0

Thực sự tốt đẹp, trợ giúp Rspec được vận chuyển! –

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