2012-07-04 27 views
6

Gần đây tôi đã chuyển đổi hệ thống xây dựng của mình thành tự động/autoconf. Trong dự án của tôi, tôi có một vài bài kiểm tra đơn vị cần một số tệp dữ liệu đầu vào trong direcory từ nơi chúng được chạy. Khi tôi chạy làm cho distcheck và nó cố gắng xây dựng VPATH, các bài kiểm tra thất bại vì họ dường như không chạy từ thư mục mà các tập tin đầu vào được. Tôi đã tự hỏi nếu có một số sửa chữa nhanh chóng cho việc này. Ví dụ, bằng cách nào đó tôi có thể nói cho hệ thống không chạy các kiểm tra này trên làm cho distcheck (nhưng vẫn chạy chúng trên thực hiện kiểm tra)? Hoặc để cd vào thư mục mà các tập tin được trước khi chạy các bài kiểm tra?làm cho việc kiểm tra và kiểm tra cần các tệp đầu vào

Trả lời

4

Giải pháp điển hình là viết các bài kiểm tra để chúng tìm trong thư mục nguồn cho các tệp dữ liệu. Ví dụ: bạn có thể tham chiếu $srcdir trong thử nghiệm hoặc chuyển đổi test thành test.in và tham khảo @[email protected].

Nếu xét nghiệm của bạn là tất cả trong thư mục nguồn, bạn có thể chạy tất cả các bài kiểm tra trong thư mục đó bằng cách thiết lập TESTS_ENVIRONMENT trong Makefile.am:

TESTS_ENVIRONMENT = cd $(srcdir) && 

này sẽ thất bại nếu một số xét nghiệm của bạn được tạo ra bởi cấu hình và do đó chỉ sống trong thư mục xây dựng, trong trường hợp này bạn có thể chọn lọc cd với một cái gì đó như:

TESTS_ENVIRONMENT = { test $${tst} = mytest && cd $(srcdir); true; } && 

Cố gắng sử dụng TESTS_ENVIRONMENT như thế này là mong manh lúc tốt nhất, và nó sẽ là tốt nhất để viết các bài kiểm tra để họ nhìn vào nguồn dire ctory cho các tập tin dữ liệu.

+0

Thử nghiệm của tôi nằm trong src/some/path và các tệp dữ liệu nằm trong cùng một thư mục. Tôi đã thử các thử nghiệm TESTS_ENVIRONMENT = cd $ (srcdir) && nhưng nó không hoạt động vì bây giờ nó không tìm thấy tệp thi hành nữa. Sao chép các tập tin dữ liệu cần thiết vào thư mục hiện tại cũng không hoạt động bởi vì, trong một xây dựng VPATH, bạn dường như không có quyền ghi vào thư mục mà các bài kiểm tra được chạy. –

+0

@Martin, bạn không có quyền ghi vào thư mục nguồn, nhưng bạn có quyền ghi vào thư mục xây dựng. Bạn sao chép tệp như thế nào? Chỉ cần thêm 'EXTRA_DIST = datafile' vào Makefile.am và' cp $ {srcdir}/datafile .' trong test.in sẽ hoạt động. Tuy nhiên, nếu thử nghiệm đang chạy từ thư mục nguồn thì cố gắng sao chép sẽ không thành công do quyền ghi. Tôi nghi ngờ bạn có một số bài kiểm tra được chạy từ thư mục xây dựng và một số được chạy từ thư mục nguồn. (Kiểm tra có tên '* .in' là (có thể) chạy từ thư mục xây dựng, trong khi các thử nghiệm khác được chạy từ thư mục nguồn.) –

+0

Điều này trông giống như những gì tôi đang tìm kiếm, nhưng điều này dường như không hoạt động với Automake 1.15, thật không may: với điều này, nó tạo ra các tệp '* .log' và' * .trs' trong thư mục nguồn (đã lỗi), nhưng vẫn tìm chúng trong thư mục xây dựng và, tất nhiên, không tìm thấy chúng ở đó (đó là gây tử vong). –

7

Tôi đã có cùng một vấn đề và giải pháp được sử dụng tương tự như của William. Makefile.am của tôi trông giống như sau:

EXTRA_DIST = testdata/test1.dat 

AM_CPPFLAGS = -DDATADIR=\"$(srcdir)/\" 

Sau đó, trong unittest của tôi, tôi sử dụng datadir xác định:

string path = DATADIR "/testdata/test1.dat" 

này làm việc với make checkmake distcheck.

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