Wie testet man Persistenzverhalten zwischen Eclipse-Sessions?

Wie testet man Persistenzverhalten zwischen Eclipse-Sessions?

Es kommt irgendwann mal der Punkt, da muss/will man testen, ob die Persistenz zwischen Eclipse-Sessions (Projektdaten, SaveParticipants, Projekt-Einstellungen, Preferences) tatsächlich zwischen Sessions persistent sind.

Das ist nicht ganz trivial, denn der JUnit TestRunner läuft innerhalb einer Session und müsste sich selbst beenden und eine neue Session starten, um die Auswirkungen zwischen Sessions zu untersuchen.

Der Weg aus diesem Teufelskreis besteht darin, im Test selbst eine neue innere Instanz von Eclipse zu starten und zu beenden.

Damit man damit nicht allzuviel zu tun hat, ist hierfür für Eclipse 3.4 ein kleines Zusatzpaket geplant. Das kann man aber auch schon mit Eclipse 3.3 (hier getestet mit Java 6) verwenden, auch wenn die Dokumentation nicht sehr weit reicht.

Zuerst müssen aus dem CVS :pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse die Projekte org.eclipse.core.tests.harness und org.eclipse.test.performance ausgecheckt werden.

Dann wird ein (fast) ganz normaler TestCase geschrieben.

public class PersistenceTests extends TestCase {
	
	public void setUp() {
	}
	
	public void testADoSomething() throws Exception {}

}


Dabei gibt es aber ein paar Dinge zu beachten:

Das Plugin mit den Testcases muss org.eclipse.core.tests.harness als Dependency angegeben haben.
Man muss die Suite explizit angeben und als WorkspaceSessionTestSuite erzeugen. Dabei muss die Plugin-ID des Test-Plugins (also des Plugins, das die Testcases enthält) als erster Parameter im Konstruktor angegeben werden. Außerdem sollte für UI-Tests die ApplicationID UI_TEST_APPLICATION gesetzt werden.
	public static Test suite() {
		WorkspaceSessionTestSuite suite = new WorkspaceSessionTestSuite(Activator.PLUGIN_ID, PersistenceTests.class);
		suite.setApplicationId(WorkspaceSessionTestSuite.UI_TEST_APPLICATION);
		return suite;
	}
Die Testmethoden werden standardmäßig von der WorkspaceSessionTestSuite alphabetisch sortiert. D.h. hier darf ausnahmsweise eine feste Reihenfolge zwischen Testfällen und damit Seiteneffekte vorausgesetzt werden. (am besten man nennt die Methoden testAXxx, testBXxx usw.
Gleichzeitig muss aber beachtet werden, dass jede einzelne Testmethode in jeweils einer einzelnen Session läuft und somit der TestCase keinen internen Zustand zwischen zwei Läufen erzeugt. Alle benötigten Attriute müssen also entweder als Konstanten oder durch setUp() initialisiert werden.
Das ganze scheint momentan nur mit einem JUnit 3 Testrunner zu funktionieren, ansonsten gibt es beim Start eine ClassCastException dass die WorkspaceSessionTestSuite kein Test ist ...

Weitere Literatur

Session Tests (Eclipsepedia)
Zuletzt geändert am 15. Juli 2010 um 09:53