Tôi có một dự án Spring mô-đun đa mà tôi thiết lập bằng Maven:Kiểm tra tài nguyên của người phụ thuộc không phải trong classpath?
my-root (pom)
- my-logic
- my-webapp (depending on my-logic)
- my-consoleapp (depending on my-logic)
lớp thử nghiệm của tôi kế thừa từ AbstractTransactionalJUnit4SpringContextTests
và sử dụng @ContextCofiguration
lập các ApplicationContext
.
Ví dụ: lớp kiểm tra cho Bộ điều khiển lò xo:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:applicationContext-logic-test.xml",
"classpath:applicationContext-web-test.xml"})
public class ControllerTest extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private ApplicationContext applicationContext;
...
}
Như bạn có thể thấy có cấu hình XML cho mỗi mô-đun. Tôi có cấu hình riêng biệt cho tesing, cư trú trong thử nghiệm/tài nguyên của mỗi module (và bổ sung có hậu tố "-test"). Tất cả các công trình này (lớp biên dịch, chạy và các kiểm tra JUnit đều thành công) nếu Tôi chạy thử nghiệm JUnit trong Eclipse.
Bây giờ vấn đề của tôi: Chạy thử nghiệm bằng Maven sẽ KHÔNG hoạt động! (ví dụ: với "Chạy dưới dạng"> "Cài đặt Maven" trên my-root
(Tôi sử dụng m2eclipse)). Cụ thể, nó sẽ ném ngoại lệ sau đây:
java.io.FileNotFoundException: đường dẫn lớp tài nguyên [applicationContext-logic-test.xml] không thể mở được vì nó không exist`
Dường Maven không thêm tệp từ my-logic/src/test/resources
vào đường dẫn lớp được thiết lập khi chạy thử nghiệm đơn vị my-webapp
.
Tôi làm cách nào để khắc phục điều đó?
Cảm ơn rất nhiều vì câu trả lời tuyệt vời này! Tôi đã sử dụng giải pháp này và nó hoạt động. Bây giờ bạn đã giải thích điều này rõ ràng với tôi cũng như các tài nguyên kiểm tra của tất cả các phụ thuộc (bên ngoài) không được bao gồm trong classpath. Làm thế nào nên họ? Nhưng bằng cách nào đó nó sẽ là tốt đẹp nếu các nguồn lực từ các mô-đun của riêng tôi sẽ được bao gồm. Mặc dù tôi không biết làm thế nào chính xác điều này sẽ làm việc, bây giờ mà tôi nghĩ về nó;) – apropoz
@apropoz Bạn đang chào đón. Ý tưởng với Maven là các module được tự chứa: bạn có thể kiểm tra một mô-đun đơn mà không có các anh em của nó và xây dựng nó. Bất cứ điều gì có liên quan đến đường dẫn tương đối sẽ phá vỡ điều này, đó là không mong muốn. –