Integrationstest für Struts mit Apache Cactus und Jetty


Ich versuche gerade einen Unit-Test für meine Struts-Actions in einem Servlet-Container zu schreiben. Dazu will ich Cactus und Jetty verwenden. Leider hapert es nach dem Einrichten meines Eclipse-Projekts beim Start der JUnit-Testsuite:

java.lang.NoSuchMethodException: org.mortbay.jetty.nio.SelectChannelConnector.setPort(java.lang.String)
        at java.lang.Class.getMethod(Class.java:1078)
        at org.apache.cactus.extension.jetty.Jetty6xTestSetup.createServer(Jetty6xTestSetup.java:374)
        at org.apache.cactus.extension.jetty.Jetty6xTestSetup.setUp(Jetty6xTestSetup.java:210)
        at org.apache.cactus.extension.jetty.Jetty6xTestSetup$1.protect(Jetty6xTestSetup.java:166)
        at junit.framework.TestResult.runProtected(TestResult.java:124)
        at org.apache.cactus.extension.jetty.Jetty6xTestSetup.run(Jetty6xTestSetup.java:175)
        at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

Jetzt bin ich einigermassen verzweifelt, denn die Hilfeseite zum Setup von Cactus und Jetty gibt nicht viel her. Also fange ich ein neues Projekt an und erstelle mir eine simple Action, die einen Parameterstring umkehrt und als Attribut in den Request legt und einen Unit Test dazu. Ausserdem werden einige Properties von Cactus benötigt, um den Servlet-Container hochfahren zu können.

http://gist.github.com/611307

Leider bringt das nicht den gewünschten Erfolg, den die Ausführung des Tests bringt dieses Fenster zutage:

Damit kann ich im Moment noch gar nichts anfangen. Bis jetzt habe ich meine Junit-Tests immer direkt mit Annotations versehen und konnte sie einfach ausführen. Das Zusammenspiel der TestSuite, des Tests und des Servlet-Containers stimmt anscheinend nicht.

Update Ich habe jetzt versucht, den Unit Test mit Junit 3 auszuführen und das Ergebnis sieht schon anders aus:

java.lang.SecurityException: sealing violation: package org.mortbay.jetty is sealed
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:234)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 

Also geht's weiter bei Google und Stackoverflow.

Weitere Artikel

Aufbau eines Hackintosh

Enable request logging in Jetty 9.1

Hacktoberfest 2017

Automatische Erneuerung von Lets Encrypt Zertifikaten

Neue Antennen für meine Fritzbox

Fitness vs Gesundheit

Renaissance Periodization, Teil 2

Der letzte PR

Fahrrad geklaut

Erstes Review des Sony XZ Premium