2009-02-11 24 views
10

Tôi đang phát triển một tính năng Eclipse bao gồm một số trình bổ sung Eclipse, sử dụng Dịch vụ khai báo Equinox (DS) để kết nối các plugin với nhau khi chạy. Tôi muốn thêm các bài kiểm tra tích hợp để xác minh cấu hình equinox.Thực hành tốt nhất cho thử nghiệm tích hợp tính năng Eclipse

Đặc biệt, tôi muốn xác minh rằng

  • các thành phần dịch vụ liên kết lại với nhau như mong đợi
  • các bó được kích hoạt
  • các plugin chia sẻ thông tin như mong đợi (xem Chỉnh sửa 2)

Hơn nữa, tôi muốn làm cho thử nghiệm tích hợp này trở thành một phần của tiếp theo quy trình tích hợp không liên tục bằng cách sử dụng một bản xây dựng không đầu của PDE Eclipse (như được mô tả herehere).

Câu hỏi của tôi là: bạn có thể giới thiệu bất kỳ khuôn khổ, công cụ, hay các hoạt động sẽ tạo điều kiện kiểu này thử nghiệm tích hợp trong các khó khăn tôi đã xác định?

Tôi đã tìm thấy hai diễn viên chính cho đến nay:

  • Spring Dynamic Modules bao gồm một khuôn khổ cho việc thử nghiệm tích hợp OSGi. Tuy nhiên, tôi đã không thể có được một thử nghiệm Spring DM đơn giản để chạy trong Eclipse. Nó phàn nàn rằng "nền tảng đã chạy".
  • Pax Exam (trước đây là Pax Drone) là một khung kiểm tra tích hợp OSGi khác.

Chỉnh sửa Chỉnh sửa, mỗi plugin có thành phần dịch vụ OSGi được định cấu hình với tệp xml định nghĩa thành phần. Lỗi trong một trong các tệp cấu hình này sẽ không phá vỡ bất kỳ phụ thuộc plugin nào và có thể dễ dàng bị bỏ qua cho đến khi chạy. Kiểm thử tích hợp là cần thiết để phát hiện lỗi như vậy.

Chỉnh sửa 2: Cho đến nay mọi thứ tôi đã thấy có vẻ xác nhận xác nhận của Uri (xem bên dưới) rằng tính năng đa plugin của Eclipse không được tích hợp thử nghiệm ở cấp tính năng/sản phẩm. Tôi sẵn sàng để đi mà không có thử nghiệm tích hợp toàn diện nếu tôi ít nhất có thể tự động xác minh rằng các thành phần dịch vụ liên kết với nhau một cách chính xác.

cách tiếp cận của tôi (không làm việc chưa):

 

In a JUnit test do 
    For each bundle/plugin of interest 
     Get the osgi Bundle object with org.eclipse.core.runtime.Platform.getBundle() 
     Verify that the Bundle is active with Bundle.getState() 
     Verify that the Bundle is using the expected services with Bundle.getServicesInUse() 
     Verify that the Bundle has registered the expected services with Bundle.getRegisteredServices() 
 

Tôi đang chạy mã của tôi với Eclipse Plug-in Kiểm tra cấu hình khởi động, tung ra sản phẩm Eclipse của tôi là "Chương trình để chạy". Khi chạy thử nghiệm, tôi có thể xác minh rằng các gói đang hoạt động nhưng các thành phần dịch vụ không được kích hoạt và các phương thức getServicesInUse và getRegisteredServices trả về null. Tôi đã tải một lớp từ mỗi gói trong trường hợp đó là vấn đề kích hoạt lười biếng, nhưng điều đó không giúp ích gì. Tôi cũng đã xác minh rằng tất cả các thành phần dịch vụ là các thành phần "ngay lập tức", vì vậy chúng sẽ được kích hoạt ngay sau khi các gói của chúng được kích hoạt. Tại sao Equinox DS không làm phép thuật?

+0

@Yossi Dahan: Sau câu hỏi này, bạn có tìm cách triển khai 'kiểm tra tích hợp' này trong OSGi/Equinox không? Chúng tôi đang đối mặt với cùng một câu hỏi tại thời điểm này – maasg

Trả lời

2

Chúng tôi đã viết khuôn khổ ít thực hiện bài kiểm tra riêng của chúng tôi dựa trên sự kết hợp của phương pháp tiếp cận: a) bundletestcollector rcp (http://rcpquickstart.com/2008/06/12/running-unit-tests-for-rcp-and-osgi-applications/) này được viết bằng Pascal Rapidcault người là một trong những kẻ RCP chính. Nó thu thập các lớp thử nghiệm từ các bó trong môi trường OSGi đang chạy.

b) khung kiểm tra knopflerfish (http://knopflerfish.org/releases/2.1.1/knopflerfish_osgi_tests_2.1.1.zip) Đăng ký kiểm tra các trường hợp là dịch vụ có thể được thực thi bởi một nhân viên kiểm tra. Ngoài ra còn có một đầu ra XML, mà tiếc là khác một chút so với định dạng ant junit XML. Bằng cách này chúng ta có thể thực hiện các xét nghiệm tích hợp sống trong các gói thử nghiệm riêng biệt cũng như các xét nghiệm gần với các xét nghiệm đơn vị cổ điển và sống trong các mảnh để bó của chúng được thử nghiệm (xem http://rcpquickstart.com/2007/06/20/unit-testing-plug-ins-with-fragments/).