2013-01-16 22 views
16

Đây là câu hỏi về thiết lập môi trường thử nghiệm.Làm thế nào để kiểm tra đơn vị python luôn tìm thấy tệp dữ liệu thử nghiệm khi chạy từ các thư mục làm việc khác nhau?

Trong dự án của tôi, tôi có một vài bài kiểm tra đơn vị truy cập tệp dữ liệu thử nghiệm. Các xét nghiệm đơn vị này có thể được chạy từ thư mục dự án của tôi thông qua một nhân viên thử nghiệm. Hoặc tôi có thể chạy từng tệp thử nghiệm/mô-đun riêng lẻ, ví dụ như cho mục đích gỡ lỗi.

Vấn đề là tùy thuộc vào nơi tôi chạy thử nghiệm từ, thư mục hiện tại là khác nhau. Vì vậy, mở một tệp dữ liệu thử nghiệm, như dưới đây, bằng cách cho một đường dẫn liên quan đến thư mục hiện tại sẽ không hoạt động khi các tệp đó được chạy từ thư mục dự án, vì tệp dữ liệu thử nghiệm không nằm trong thư mục đó.

f = open('test_data.ext', 'r') 

Tôi đã nghĩ đến việc sử dụng __file__ để sử dụng đường dẫn tương ứng với mô-đun thử nghiệm hiện tại, nhưng doesn't work when the test module calling __file__ is the one being run individually này.

Mọi người thường giải quyết vấn đề này như thế nào?

+0

Tôi nhận ra câu hỏi này là không hoàn toàn python cụ thể, nhưng tôi sẽ ủng hộ giải pháp python thành ngữ , nếu có cái nào. – ptrico

Trả lời

6

Một số cách khác nhau tôi suy nghĩ:

  1. Đặt biến môi trường cho thư mục dữ liệu của bạn
  2. Viết một module nhỏ mà bạn luôn nhập khẩu có mục đích duy nhất của việc có một vị trí cố định liên quan đến thư mục dữ liệu của bạn, sau đó gọi __file__ từ đó
  3. Tạo các dữ liệu trong thời gian chạy
  4. Lưu trữ dữ liệu của bạn trong một cơ sở dữ liệu chứ không phải là một tập tin
  5. cửa hàng của bạn dữ liệu ở một vị trí cố định trong hệ thống tập tin chứ không phải là một vị trí tương đối so với gói
  6. Đừng chạy mã kiểm tra của bạn trực tiếp

Các giải pháp mà làm cho ý nghĩa nhất cho bạn phụ thuộc vào môi trường của bạn và cụ thể của bạn dữ liệu và chương trình.

+0

Cảm ơn các tùy chọn khác nhau. Tôi đã kết thúc ở vị trí thứ 2, sau khi bị loại bỏ vì tôi không thể làm việc đó được. Bây giờ tất cả đều tốt. – ptrico

+0

Tôi cũng sử dụng số 2, với cách tiếp cận này: http://stackoverflow.com/a/5748583/1082367 - os.path.abspath (inspect.getsourcefile (local_function)) –

-1

Tôi không chắc đó là giải pháp hoàn chỉnh của bạn, nhưng đối với thử nghiệm Đơn vị bằng Python, tôi luôn sử dụng Nose. Nó có một thủ tục Test Discovery tuyệt vời. Bạn có thể tìm thấy cơ chế của nó here. Có lẽ bạn có thể nhận được một số ý tưởng để sử dụng cho kiểm tra đơn vị truyền thống của Python cũng ..

py.test cũng sử dụng một cơ chế Discovering gọn gàng ..

+1

+1 để đề xuất sử dụng khung kiểm tra đơn vị cho chạy thử nghiệm. Không nhất thiết phải giải quyết vấn đề tập tin dữ liệu bên ngoài, nhưng chắc chắn là một ý tưởng tốt không kém. –

+0

Đúng vậy, và người thử nghiệm tôi đã đề cập trong câu hỏi trên thực tế là mũi. – ptrico

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