2009-07-27 25 views
7

Chúng tôi đang xây dựng các dự án EAR & EJB của chúng tôi với maven. Nó sẽ xây dựng tất cả các dự án EJB và sau đó chúng được sử dụng làm phụ thuộc cho EAR, vì vậy chúng được đóng gói vào tệp EAR cuối cùng.Mô-đun EAR Maven và các phụ thuộc EJB kiểm tra

Vấn đề là mỗi dự án EJB có các kiểm tra junit kiểm tra EJB. Hiện tại, các thử nghiệm này không hữu ích vì chúng cố gắng kết nối với máy chủ ứng dụng (jboss) và thực thi các phương thức từ giao diện EJB.

Có cách nào tôi có thể xây dựng các EJB, xây dựng và triển khai EAR và sau đó chạy tất cả các thử nghiệm từ tất cả các EJB đối với máy chủ ứng dụng không?

Hiện tại tôi đang mô phỏng AP trong các thử nghiệm bằng cách bắt đầu các lớp thực thi EJB và tiêm "tiêm chích" thủ công (someEJBImpl.em = EntityManager ....), điều này rất khó chịu, bởi vì chúng ta có sự phụ thuộc rất lớn giữa chúng và Tôi phải tự mình xử lý các giao dịch.

Có cách nào khác để chạy thử nghiệm EJB đối với AP thực không? Có thể triển khai EAR sau mỗi mô-đun EJB với tập con của các mô-đun EJB đã được xây dựng? Nhưng bằng cách nào ?

Có thể được thiết lập để chạy thử nghiệm maven của tất cả các mô-đun EJB như là một phần của kiểm tra EAR? Làm như thế nào ?

Trả lời

7

Đây không phải là vấn đề đơn giản và không có câu trả lời dễ dàng. Hy vọng rằng những con trỏ này sẽ giúp ích.

Tôi nghĩ chiến lược tốt nhất của bạn là tách các bài kiểm tra của bạn thành các bài kiểm tra đơn vị chính hãng - những bài kiểm tra có thể chạy riêng biệt mà không cần thùng chứa và di chuyển các bài kiểm tra yêu cầu container vào kiểm tra tích hợp.

Bạn có thể sử dụng Ejb3unit để tối đa hóa các thử nghiệm không yêu cầu vùng chứa để chạy. Nó giúp mô phỏng một số phụ thuộc phức tạp. Ejb3unit có một plugin Maven, xem documentation để biết chi tiết kết nối với kho lưu trữ Maven của họ.

Các khuôn khổ mocking khác như JMock cũng có thể hữu ích. Bạn có thể mô phỏng các lớp cũng như các giao diện nếu bạn sử dụng ClassImposteriser.

Đối với những thử nghiệm cần vùng chứa EJB, bạn có thể định cấu hình để chạy dưới dạng integration tests, có thể chuyển chúng sang một dự án riêng biệt, tùy thuộc vào mối quan hệ giữa các dự án EJB của bạn.

Có thể khởi chạy embedded Jetty instance in your JUnit tests và thêm chương trình servlet vào chương trình. Tất nhiên Jetty không phải là một thùng chứa EJB, bạn sẽ cần một thùng chứa EJB như OpenEJB.

Để cấu hình OpenEJB vào Jetty, sử dụng cấu hình như thế này:

<plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>maven-jetty-plugin</artifactId> 
    <configuration> 
    <scanIntervalSeconds>5</scanIntervalSeconds> 
    <contextPath>/example</contextPath> 
    <systemProperties> 
     <systemProperty> 
     <name>java.naming.factory.initial</name> 
     <value>org.apache.openejb.client.LocalInitialContextFactory</value> 
     </systemProperty> 
     <systemProperty> 
     <name>java.naming.factory.url.pkgs</name> 
     <value>org.mortbay.naming</value> 
     </systemProperty> 
    </systemProperties> 
    </configuration> 
</plugin> 

Tờ khai phụ thuộc cho OpenEJB sẽ là:

<dependency> 
    <groupId>org.apache.openejb</groupId> 
    <artifactId>openejb-core</artifactId> 
    <version>3.1</version> 
    <scope>test</scope> 
</dependency> 

Bạn cũng có thể sử dụng Selenium để giúp đỡ với các bài kiểm tra chức năng (giả sử bạn có điều này đến nay), đây là một guide using Selenium, Jetty and OpenEJB để làm như vậy.

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