2010-05-19 29 views
12

Trong một thử nghiệm JUnit Tôi đang sử dụng mã này để nạp vào một tập tin cấu hình thử nghiệm cụ thể:rắc rối Classpath sử dụng JUnit với cả Eclipse và Maven

InputStream configFile = getClass().getResourceAsStream("config.xml"); 

Khi tôi chạy thử nghiệm qua nhật thực, nó đòi hỏi sự tệp xml nằm trong cùng thư mục với tệp thử nghiệm.

Khi tôi xây dựng dự án với maven, nó yêu cầu xml phải ở trong src/test/resources, sao cho nó được sao chép vào target/test-classes.

Tôi làm cách nào để cả hai chỉ hoạt động với một tệp?

Trả lời

15

Đặt tệp config.xml trong src/test/resources và thêm src/test/resources làm thư mục nguồn trong Eclipse.

Vấn đề khác là cách getResourceAsStream("config.xml") hoạt động với các gói. Nếu lớp đang gọi đây là trong gói com.mycompany.whatever, thì getResourceAsStream cũng đang mong đợi tệp config.xml nằm trong cùng một đường dẫn. Tuy nhiên, đây là cùng một đường dẫn trong đường dẫn lớp học không phải là hệ thống tệp. Bạn có thể đặt tệp trong cùng cấu trúc thư mục dưới src/test/resources - src/test/resources/com/mycompany/whatever/config.xml - hoặc bạn có thể thêm "/" dẫn đầu vào đường dẫn - điều này làm cho tải getResourceAsStream các tập tin từ cơ sở của classpath - vì vậy nếu bạn thay đổi nó để getResourceAsStream("/config.xml") bạn chỉ có thể đặt các tập tin trong src/test/resources/config.xml

+1

Đúng rồi!Các/là vấn đề. Cảm ơn! – Steve

4

Thử thêm thư mục src/test/resources/ làm thư mục nguồn trong dự án Eclipse của bạn. Bằng cách đó, nó phải nằm trên classpath khi Eclipse cố chạy thử nghiệm đơn vị của bạn.

+0

Đáng buồn thay, nhận xét tiết kiệm duy nhất này đã khiến tôi mất một ngày để tìm kiếm. Giải quyết vấn đề của tôi về các bài kiểm tra mà có được bó tài nguyên chạy tốt trong Maven nhưng thất bại khi chạy trong Eclipse. Cảm ơn! – davemyron

0

nếu bạn chỉ cần nó lúc kiểm tra, bạn có thể tải nó thông qua các hệ thống tập tin, bối cảnh ở đây nên giống nhau cho cả hai trường hợp:

new FileInputStream(new File("target/test-classes/your.file")); 

không đẹp, nhưng nó hoạt động

1

Tôi biết đây là một câu hỏi cũ, nhưng tôi vấp vào nó và tìm thấy nó kỳ quặc rằng không có câu trả lời nào ở trên đề cập đến Plugin Eclipse Maven. Chạy mvn eclipse:eclipse và nó sẽ thêm src/main/resourcessrc/test/resources và tương tự như "Đường dẫn xây dựng Java" trong Eclipse cho bạn.

Nó có một loạt các công cụ bạn có thể cấu hình từ đó quá (nếu bạn cần phải đi chệch khỏi những quy ước, nếu bạn không sau đó nó đã sẵn sàng để đi):

Nói chung, nếu bạn đang sử dụng Maven, đừng thay đổi thủ công công cụ trong Eclipse. Không bao giờ cam kết của bạn .classpath/.project và thay vào đó chỉ sử dụng Maven Eclipse Plugin để tạo các tệp đó (và hoặc cập nhật chúng). Bằng cách đó bạn có MỘT nguồn cấu hình cho dự án của bạn, MAVEN, và không phải là cài đặt thủ công mà bạn sẽ phải nói với người khác sử dụng và ghi nhớ bản thân và vân vân. Nếu đó là một dự án Maven: kiểm tra nó ra khỏi điều khiển nguồn, chạy "mvn eclipse: eclipse" và nó sẽ làm việc trong Eclipse, nếu nó không POM của bạn cần làm việc.

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