OSGi JUnit Plug'in Tests von deklarativen Services

I

Isnogod

Gast
Hallo,

ich zerbreche mir seit einigen Stunden den Kopf über das Testen von deklarativen Services mittels JUnit Plug'in Tests.
Tests von nicht deklarativen Services laufen problemlos vom Laden des Containers über das Ausführen der Bundle's bis zum Herunterfahren des Containers.

Nach der Solution aus stackoverflow wird bei mir leider nicht der deklarative Service geladen, so dass ich jedes mal eine NPE bekomme.

Ein Consumer des deklarativen Services läuft ebenfalls problemlos so dass es an diesem selbst nicht liegen kann.

Hoffe es kann mir wer helfen.

Gruß
 
M

maki

Gast
Willst du den deklerativen Service selber testen?
Dann hole sie dir einfach aus der OSGi Registry, so als ob es keine deklerativen Services wären.
 
I

Isnogod

Gast
Hallo,

erst mal noch ein paar Rahmenbedingungen zur Erklärung, wo ich mich gestern zu kurz gefasst habe.
Ich benutze Eclipse und den Equinox Container für OSGi.
Als Build-Tool kommt Maven zum Einsatz welches über das Tycho-Plug'in (Version 14) nach MANIFEST-First meine Bundles baut.
Nun möchte ich auch die Testmöglichkeiten ausschöpfen welche über das simple Testen von einer isolierten Javaklasse hinausgehen.
D.h. ich möchte meine Bundles auch Integrations- und Systemtests unterziehen, sprich im OSGi-Kontext testen. (die OSGi Umgebung wird hochgefahren und die Tests durch geführt).
Das funktioniert auch soweit für die Verwendung von normalen Bundles (gestartet durch einen Activator und im Kontext registriert) mittels des tycho-surefire-plugin.
Bei der Verwendung eines deklarativen Services hingegen scheint es jetzt so als ob dieser nicht gestartet wird und ich bekomme beim Zugriff eine NullPointerException.

@maki:
Danke aber leider funktioniert der einfache Aufruf, von der JUnit Ebene aus in die OSGi Ebene, nur wenn man an den Kontext kommt. Was zum Beispiel über einen Activator möglich ist doch leider fällt der ja beim deklarativen Services weg.
 
M

maki

Gast
Tycho fährt die die ges. Plattform hoch, wie bei einem Integrationstest üblich.

Wird denn der Extender auch gestartet bzw. alle benötigten Bundles?

Liegen deine JUnit tests in einem Fragment oder in einem Bundle?
Für reine Integrationstests empfehlen sich IME bundles, da Integraitonstests besser als Blackboxtests geschrieben werden.

Um einen DS in einen Test injizieren zu lassen müsstest du den Test als Komponente eintragen... aber verstehe immer noch nicht genau wo7was dein Problem ist.

Zeig doch mal etwas Code um dein Problem zu verdeutlichen.
 
I

Isnogod

Gast
Hallo,

das nenn ich mal fixe Antwort. :)

Die Bundles fahren schon mit hoch, wie gesagt nicht deklarative Services funktionieren. Der Test liegt in einem Fragment und ist analog zu einem deklarativen Service Consumer in eine Component eingetragen.

Meine Test-Klasse

Java:
package com.project.bundle.test;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import com.project.bundle.Activator;
import com.project.declarative.IQuoteService;

public class ActivatorTest {
	private static CountDownLatch dependencyLatch = new CountDownLatch(1);
        // 1 = number of dependencies required
	static IQuoteService service = null;

	@Before
	public void dependencyCheck() {
		// Wait for OSGi dependencies
		try {
			dependencyLatch.await(10, TimeUnit.SECONDS);
			// Dependencies fulfilled
		} catch (InterruptedException ex) {
			System.out.println("fail");
			// fail("OSGi dependencies unfulfilled");
		}
	}

	@Test
	public void stupidActivatorTest() {
		Activator activator = Activator.getDefault();
		System.out.println("Test run");
		if (activator != null) {
			System.out.println("Test Ok!");
		}
		Assert.assertNotNull(activator);
	}

	public synchronized void setQuote(IQuoteService service) {
		this.service = service;
		System.out.println(service.getQuote());
		dependencyLatch.countDown();
	}


	public synchronized void unsetQuote(IQuoteService service) {
		System.out.println("Service was unset. Why did you do this to me?");
		if (this.service == service) {
			this.service = null;
		}
	}

	@Test
	public void declaTest() {
		
		[WR]System.out.println(service.getQuote());[/WR] //Hier leider kein Zugriff
	}
}

Der Component-Eintrag des Tests:

[XML]<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="ActivatorTest">
<implementation class="com.project.bundle.test.ActivatorTest"/>
<reference name="iQuoteService" interface="com.project.declarative.IQuoteService" policy="static" cardinality="1..1" bind="setQuote" unbind="unsetQuote"/>
</scr:component>
[/XML]
 

manuelle

Mitglied
Hallo zusammen,

ich muss einpaar Junit Tests führen, aber habe das noch nie gemacht. Jetzt kommt noch hinzu das es Plugin basiert sein muss! Wie macht man das den am besten, sollte man eher die Test in Fragment bundles, in bundles oder im selben package zu testenden codes ablegen? Und wo liegen die unterschiede, was für abhängigkeiten enstehen?

Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JUnit Plug'in Tests Plattformprogrammierung 18
N Junit Plug-In Test Plattformprogrammierung 13
E Wie Junit mit Netbeans 8.1 verwenden ? Plattformprogrammierung 28
D Plugin - JUnit - Tests aus einem anderen Projekt ausführen Plattformprogrammierung 7
M JUnit 4.3.1 aus eclipse plugins durch junit 4.4 ersetzen Plattformprogrammierung 2
M Plugin JUnit Test Plattformprogrammierung 4
E OSGi Eclipse Plug-in programmierung: java.lang.NullPointerException: Cannot enter synchronized block because "profile" is null Plattformprogrammierung 4
J Eclipse Plug-In für UML-Diagramme Problem Plattformprogrammierung 4
lumo RCP bilder in Plug-Ins Plattformprogrammierung 4
P RCP Plug-in Wizard unter Indigo? Plattformprogrammierung 2
G Eclipse Plug-in: wie refreshe ich eine combobox? Plattformprogrammierung 4
M Eclipse Plug-in: Wie eine Grafik einfügen? Plattformprogrammierung 20
F Eclipse: Plug-In mit eigenen Bildern Plattformprogrammierung 6
F Eclipse: Plug-In mit Ecoding Problem Plattformprogrammierung 7
K Zugriff auf Oracle aus Eclipse Plug-In Plattformprogrammierung 7
J Wo finde ich die JFace Plug-ins? Plattformprogrammierung 2
D Eclipse Plug-In mit (plug-in) Project Wizard Plattformprogrammierung 2
A Overlay in View eines anderen Plug-Ins zeichnen Plattformprogrammierung 2
G WYSIWYG HTML Editor als Eclipse Plug-In Plattformprogrammierung 6
lumo Eclipse Plug-In: Editors und Views Plattformprogrammierung 3
lumo Eclipse 3.5 Plug-In für ein Plug-In Plattformprogrammierung 3
N import von Plug-in nicht Plattformprogrammierung 4
G Mehrere Sprachen im Plug-In anbieten Plattformprogrammierung 5
R Eclipse Plug-In Entwicklung Plattformprogrammierung 6
Saxony Eclipse RCP - Erstellungreihenfolge Plug-In und Fragmente Plattformprogrammierung 2
Saxony Referencen in Plug-In Fragment Plattformprogrammierung 4
U PDE Build Erros: "Missing required plug-in" obwohl vorhanden! Plattformprogrammierung 5
dzim Plug-Ins zur Laufzeit hinzufügen Plattformprogrammierung 12
byte Equinox - Klasse aus Plug-In wird nicht gefunden Plattformprogrammierung 3
B XML-File Parsen im Eclipse Plug-in Plattformprogrammierung 2
G neues project -> Plug-in project. Wie plugin starten? Plattformprogrammierung 6
R Integration von JDOM in Eclipse Plug-in Projekt? Plattformprogrammierung 7
Tobse Automatisierte Performance Tests Plattformprogrammierung 9

Ähnliche Java Themen


Oben