2009-02-11 7 views
10

Ich entwickle ein Eclipse-Feature, das aus mehreren Eclipse-Plugins besteht, wobei die deklarativen Services von Equinox (DS) verwendet werden, um die Plugins zur Laufzeit miteinander zu verbinden. Ich möchte Integrationstests hinzufügen, um die Equinox-Konfiguration zu überprüfen.Best Practices für die Integration von Eclipse-Funktionen

Insbesondere möchte ich, dass

  • die Servicekomponenten als
  • die Bündel
  • erwartet binden zusammen, um zu überprüfen
  • Plugins aktiviert werden, Informationen auszutauschen als erwartet (Edit 2 sehen)

Desweiteren möchte ich diesen Integrationstest zu einem Teil meines Cont. Machen Integrationsprozess mit einem Eclipse PDE Headless Build (wie beschrieben here und here).

Meine Frage ist: Können Sie Frameworks, Tools oder Praktiken empfehlen, die diese Art von Integrationstests in den Grenzen erleichtern werde ich identifiziert haben?

Ich habe zwei Leitungen bisher gefunden:

  • Spring Dynamic Modules enthält für OSGi Integrationstests einen Rahmen. Ich konnte jedoch keinen einfachen Spring-DM-Test in Eclipse ausführen. Es beschwert sich, dass "die Plattform bereits läuft".
  • Pax Exam (früher Pax Drone) ist ein weiteres OSGi-Integrationstest-Framework.

bearbeiten: Um zu klären, jedes Plugin verfügt über eine OSGi-Service-Komponente mit einer Komponentendefinition XML-Datei konfiguriert. Ein Fehler in einer dieser Konfigurationsdateien bricht keine Plug-in-Abhängigkeiten und könnte bis zur Laufzeit leicht unbemerkt bleiben. Integrationstests sind notwendig, um solche Fehler zu erkennen.

Edit 2: Bis jetzt scheint alles, was ich gesehen habe, Uri's Behauptung zu bestätigen (siehe unten), dass Multi-Plugin Eclipse Features auf der Feature/Produkt-Ebene nicht integrationsgetestet sind. Ich bin bereit, auf umfassende Integrationstests zu verzichten, wenn ich zumindest automatisch verifizieren kann, dass die Servicekomponenten korrekt miteinander verbunden sind.

Mein Ansatz (nicht funktioniert noch):

 

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() 
 

ich meinen Code mit einer Eclipse-Plug-in-Test Startkonfiguration ausgeführt wird, meine Eclipse-Produkt als "Programm ausführen" starten. Wenn die Tests ausgeführt werden, kann ich überprüfen, ob die Bundles aktiv sind, aber die Servicekomponenten nicht aktiviert werden und die Methoden getServicesInUse und getRegisteredServices null zurückgeben. Ich habe eine Klasse aus jedem Paket geladen, für den Fall, dass es sich um ein Problem bei der Aktivierung von Lazy handelt, aber das hat nicht geholfen. Ich habe auch überprüft, dass alle Servicekomponenten "unmittelbare" Komponenten sind, also sollten sie aktiviert werden, sobald ihre Bündel aktiviert sind. Warum macht Equinox DS nicht seine Magie?

+0

@Yossi Dahan: Haben Sie nach dieser Frage einen Weg gefunden, diese Integrationstests in OSGi/Equinox zu implementieren? In diesem Moment stehen wir vor der gleichen Frage – maasg

Antwort

2

Wir schrieben unsere eigenen kleinen Rahmen der Testdurchführung basiert auf einer Kombination von zu Ansätzen: a) rcp bundletestcollector (http://rcpquickstart.com/2008/06/12/running-unit-tests-for-rcp-and-osgi-applications/) Das von Pascal Rapidcault geschrieben, die eine der wichtigsten RCP Jungs ist. Es sammelt Testklassen aus Bundles in einer laufenden OSGi-Umgebung.

b) das knopflerfish-Test-Framework (http://knopflerfish.org/releases/2.1.1/knopflerfish_osgi_tests_2.1.1.zip) Registriert Testfälle als Services, die von einem Test-Runner ausgeführt werden können. Es gibt auch eine XML-Ausgabe, die sich leider ein wenig vom XML-Format von ant junit unterscheidet.

Auf diese Weise können wir Integrationstests durchführen, die in separaten Testpaketen leben, sowie Tests, die näher an klassischen Unit Tests sind und in Fragmenten zu ihren getesteten Bündeln leben (siehe http://rcpquickstart.com/2007/06/20/unit-testing-plug-ins-with-fragments/).

Verwandte Themen