OSGi OSGi Blueprint Integrationstests

borobudur

Aktives Mitglied
Hallo, hat jemand schon einmal integrationstest im osgi-blueprint umfeld umgesetzt?

Ich habe das problem, dass ich meine bundels mit dependency-injection "via blueprint" erstelle. Nun versuche ich einen integrationstest zu bauen (auch ein bundel) und dieses mit maven zu installieren. Das geht aber nicht, da maven zuerst die tests laufen lässt und damit mit einem error endet. Das framework hat die instanzen nicht injected!
 
Kenne blueprint jetzt nciht im Detail, hab immer mit SpringDM gearbeitet 😉

Welche Phase nutzt du denn für eine Integrationstests, welches Maven plugin um diese auszuführen?
Dass Integrationstests in einem eigenen Maven Modul ausgelagert sein sollten ist selbstredend und wird von mir vorausgesetzt 😉
 
[XML]<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>compiled-bundle-settings</artifactId>
<groupId>ch.fhnw.athene.store.build</groupId>
<version>0.1.0</version>
<relativePath>../poms/compiled/</relativePath>
</parent>
<groupId>ch.fhnw.athene.store</groupId>
<artifactId>athene-store-test</artifactId>
<version>0.1.0</version>
<name>Pax Exam based Testproject</name>
<properties>
<skipTests>false</skipTests>
</properties>

<build>
<plugins>
<plugin>
<groupId>org.ops4j.pax.exam</groupId>
<artifactId>maven-paxexam-plugin</artifactId>
<version>1.2.3</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>${skipTests}</skipTests>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.ops4j.pax.exam</groupId>
<artifactId>pax-exam</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.ops4j.pax.exam</groupId>
<artifactId>pax-exam-junit</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.ops4j.pax.exam</groupId>
<artifactId>pax-exam-container-default</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.servicemix.tooling</groupId>
<artifactId>depends-maven-plugin</artifactId>
<version>1.2</version>
<type>maven-plugin</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.fhnw.athene.store</groupId>
<artifactId>ch.fhnw.athene.store.triple</artifactId>
<version>0.1.0</version>
<type>bundle</type>
<scope>compile</scope>
</dependency>
</dependencies>

</project>
[/XML]
 
Für Integrationstests am besten die integrations-test pahse nutzen, zusammen mit dem failsafe plugin (Maven Failsafe Plugin - Introduction) anstatt des surefire plugins.

Wir wohl dein konkretes Problem nicht lösen, ist aber zumindest mal ein Schritt in die richtige Richtung.

Wie gesagt, nutze kein blueprint sondern SpringDM, aber solltest du das pam-exam test nicht noch konfigurieren (Quellcode)?
 
Java:
    @Configuration
    public static Option[] configure() {
        return CoreOptions.options(CoreOptions.provision(
                // Infrastructure bundles
                CoreOptions.mavenBundle().groupId("org.osgi").artifactId("osgi_R4_core"),
                CoreOptions.mavenBundle().groupId("org.osgi").artifactId("osgi_R4_compendium"),
                CoreOptions.mavenBundle().groupId("com.hp.hpl.jena").artifactId("sdb"),
                // Project bundles
                CoreOptions.mavenBundle().groupId("ch.fhnw.athene.store").artifactId("ch.fhnw.athene.store.triple")
                        .versionAsInProject()));
    }

    @Test
    public void saveOntologyTest() {
        ASOntology asOntology = (ASOntology) bundleContext.getServiceReference(ASOntology.class.getName());
        Assert.assertNotNull(asOntology);
    }
 
Ich gehe davon aus, dass das noch niemand umgesetzt hat. Hab nix gefunden, so dass meine bundles resp. meine beans/services beim integrationstest instanziiert werden.
 
Wie gesaagt, kenne Felix nicht und auch nicht die pax-exam-junit Bundles.

Für mich als Equinoxer mit SpringDM stellt sich die Sache, also ein Integrationstest, so dar:
Man erstellt eine targetplattform, die nur die bundles enthält die man für den I-test braucht, startet diese, und dann lässt man Tests gegen die zu testende Konponente laufen.

Deswegen verstehe ich nciht, das du sagst das deine Services/Beans beim I-Test nicht instanziiert werden, müsste doch genauso funzen wie bei einem normalen "Run" der App.

SpringDM bietet auch Unterstützung für Pseudo I-Tests, kommt dem richtigen I-Test recht nahe, ist aber eher ein Unittest (Bundles werden on-the-fly erzeugt, Mocks, etc.)
 

Neue Themen


Zurück
Oben