Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Moin,
ich habe eine Anwendung bestehend aus Client und (Web-)Server und möchte nun mit JUnit den Client testen. Damit die Tests erfolgreich absolviert werden können, wird ein laufender Server benötigt. Für das Bauen, Testen und Deployment verwende ich Maven.
Daher verwende ich das Jetty-Maven-Plugin, welches vor den Tests gestartet, sowie anschließend beendet wird. Als Abhängigkeit habe ich das Webserver-Projekt angegeben. Allerdings versucht das Plugin, ein nicht-existierendes war-File meiner Client-Applikation zu laden.
Wie kann ich dem Plugin mitteilen, dass er das über die angegebene dependency geladene war-File im Jetty hochfahren soll? Nach dem was ich über google erfahren habe, konnte man in Maven1 die Property "jetty-bundle" auf "true" setzen. Das ist nun offenbar nicht mehr möglich?
Ich weiß, dass man über das Element <webApp> den Pfad zum war-File angeben kann. Jedoch legt Maven die Abhängigkeiten in irgendeinem Maven-spezifischen Verzeichnis ab, welcher auf verschiedenen Rechnern unterschiedlich aussieht. Kommt man dort vielleicht durch Maven-Variablen (sowas wie ${basedir}) ran? Hier den absoluten Pfad zu verwenden, ist ja auch nicht Sinn der Sache.
Hier übrigens der relevante Ausschnitt aus meiner POM:
Kenne mich mit Jetty nicht aus, nutze Tomcat (mit dem Cargo Plugin für Integrationstests), versuche trotzdem mal was dazu zu sagen, auf die Gefahr hin, dass die Antwort die nicht helfen wird.
ich habe eine Anwendung bestehend aus Client und (Web-)Server und möchte nun mit JUnit den Client testen. Damit die Tests erfolgreich absolviert werden können, wird ein laufender Server benötigt. Für das Bauen, Testen und Deployment verwende ich Maven.
Das hört sich wie ein Integrationstest an, dafür verwende ich das Cargo Plugin und ein eigenes Maven Modul(Projekt), letzteres ist aus mehreren Gründen empfehlenswert.
Daher verwende ich das Jetty-Maven-Plugin, welches vor den Tests gestartet, sowie anschließend beendet wird. Als Abhängigkeit habe ich das Webserver-Projekt angegeben. Allerdings versucht das Plugin, ein nicht-existierendes war-File meiner Client-Applikation zu laden.
Hmm... in welcher pom steht denn die Jetty Konfiguration?
Der des Client? Das würde das verhalten erklären
Mit einem eigenen Modul für die Integrationstest wäre das imho anders.
Wie gesagt, kenne das JEtty Plugin nicht, könnte mich auch irren.
Kenne mich mit Jetty nicht aus, nutze Tomcat (mit dem Cargo Plugin für Integrationstests), versuche trotzdem mal was dazu zu sagen, auf die Gefahr hin, dass die Antwort die nicht helfen wird.
Das hört sich wie ein Integrationstest an, dafür verwende ich das Cargo Plugin und ein eigenes Maven Modul(Projekt), letzteres ist aus mehreren Gründen empfehlenswert.
Naja, in bin jetzt nicht so der Experte, was beim Testen die "reine Lehre" angeht. Aber wenn ich das Verhalten von Methoden wie sendMessage() teste, dann ist das doch eher ein Unit-Test als ein Integrationstest, oder? Von daher denke ich, dass das nicht in ein Extra-Modul gehört.
Ja, die steht in der des Clients. Ich versteh das Verhalten schon, würde ihm aber trotzdem gerne sagen, dass er es anders machen soll... Prinzipiell sollte es möglich sein, man kann ja wie gesagt auch den Pfad des war-Files angeben.
Naja, in bin jetzt nicht so der Experte, was beim Testen die "reine Lehre" angeht. Aber wenn ich das Verhalten von Methoden wie sendMessage() teste, dann ist das doch eher ein Unit-Test als ein Integrationstest, oder? Von daher denke ich, dass das nicht in ein Extra-Modul gehört.
Was denn für eine "reine Lehre"? Maven2 hat einerseits so seine Probleme mit der Integrations test phase und anderer ist Maven2 dafür ausgerichtet (also üblich & empfohlen) die Integrationstest in ein eigenes Modul auszulagern.
Nutzt du Mock Objekte? Oder lässt du die "Komponenten" (zB. alle Schichten) in "echt" arbeiten?
Testen ohne Mockobjekte führt zwangsläufig zu Integrationstests.
Einen Server zu starten um seine Tests durchzuführen ist jedenfalls todsicher ein Integrationtest
Ja, die steht in der des Clients. Ich versteh das Verhalten schon, würde ihm aber trotzdem gerne sagen, dass er es anders machen soll...
Unit-Test = Test der Methoden einer Komponente (=eine Klasse + evtl. Interface), Abhaengigkeiten werden durch Mock-/Dummy-Objekte ersetzt und somit nicht mitgetestet
Integrationstest = Test mehrerer (aller) Klassen in ihrem Zusammenspiel, z.B. User-Story
Ich experimentiere grad ein bisschen mit OpenEJB 3.1 herum, da kann man einen kompletten Application-Container in seinen Tests starten... allerdings weiss ich grad nicht, ob das fuer dich relevant waere.
Ich experimentiere grad ein bisschen mit OpenEJB 3.1 herum, da kann man einen kompletten Application-Container in seinen Tests starten... allerdings weiss ich grad nicht, ob das fuer dich relevant waere.
Wenn ich mich nicht täusche, sollte doch dass hier ausreichen:
[xml] <deployer>
<type>remote</type>
<deployables>
<deployable>
<groupId>acme</groupId>
<artifactId>projectxyz</artifactId>
<type>war</type>
<properties>
<context>contextPath</context>
</properties>
</deployable>
</deployables>
</deployer>
[/xml]
Was meldet denn Jetty bzw die logs und maven2?
Nebenbei, du musst das in eine eigenes Modul/Pom auslagern, wenn du wirklich diese Phase nutzen willst:
[xml]<phase>test-compile</phase>
[/xml]
.. denn zu dieser Phase ist das war weder erstellt noch im lok. Repo installiert.
Aber wozu denn überhaupt diese Phase missbrauchen? Nicht umsonst hat Maven2 mehr als genug Phasen definiert, zB,. [c]pre-integration-test[/c]
auch in phase "pre-integration-test" das gleiche spiel...
er startet den jetty mit dem standard-cargo-war-file:
Code:
[INFO] [cargo:start]
[INFO] [beddedLocalContainer] Jetty 6.x Embedded starting...
2009-10-07 18:55:27.886::INFO: Logging to STDERR via org.mortbay.log.StdErrLog
2009-10-07 18:55:27.959::INFO: jetty-6.1.1rc1
2009-10-07 18:55:28.310::INFO: Extract jar:file:/path/to/project/target/jetty6x/cargocpc.war!/ to /tmp/Jetty_0_0_0_0_8080_cargocpc.war__cargocpc__xflgf3/webapp
log4j:WARN No appenders could be found for logger (org.apache.jasper.compiler.JspRuntimeContext).
log4j:WARN Please initialize the log4j system properly.
2009-10-07 18:55:29.043::INFO: Started SelectChannelConnector @ 0.0.0.0:8080
[INFO] [beddedLocalContainer] Jetty 6.x Embedded started on port [8080]