Hallo,
ich habe eine ganze Reihe an Unit-Tests welche (bewusst) ohne Mocking arbeiten. Dazu wird beim Aufsetzen des ApplicationContexts (Spring) eine H2 hochgefahren. Die Tests sind mit @SqlGroup annotiert:
Lokal unter Windows ist die Ausführung unproblematisch. Ebenso die Ausführung via maven clean install. Wenn ich den Spaß nun aber unter Linux oder FreeBSD bauen will (egal ob OpenJDK oder Oracle-JDK), bekomme ich Testfehler die auf modifizierte Datenbankdaten hindeuten. Die DB soll vor jeder Testmethode neu initialisiert werden, und eine Nebenläufigkeit von Tests geht natürlich nicht. Aber genau das scheint unter Linux zu erfolgen?! Der Ausgabe nach wird alles im "main-Thread" ausgeführt - aber wie gesagt - ein Fehler der eindeutig auf Unittest-A modifiziert Daten, Unittest-B erwartet andere Daten hindeutet.
Mit folgender pom.xml Einstellung kann ich das Verhindern:
Problem ist nur.... nun wird jedesmal für jede Testklasse ein WebContext hochgefahren.... mit einem Reuse des Context wäre das ganze wesentlich fixer....
Ich verstehe nicht, warum ich überhaupt die Probleme unter Linux habe, aber nicht unter Windows (getestet mit mvn via cmd.com und mvn via Eclipse)...
Hat einer Ideen?
ich habe eine ganze Reihe an Unit-Tests welche (bewusst) ohne Mocking arbeiten. Dazu wird beim Aufsetzen des ApplicationContexts (Spring) eine H2 hochgefahren. Die Tests sind mit @SqlGroup annotiert:
Code:
@SqlGroup({ @Sql(executionPhase = ExecutionPhase.BEFORE_TEST_METHOD, scripts = { "classpath:h2prepare.sql",
"classpath:h2dump.sql", "classpath:h2ext.sql", "classpath:h2defaults.sql", "classpath:testdata.sql" }) })
Lokal unter Windows ist die Ausführung unproblematisch. Ebenso die Ausführung via maven clean install. Wenn ich den Spaß nun aber unter Linux oder FreeBSD bauen will (egal ob OpenJDK oder Oracle-JDK), bekomme ich Testfehler die auf modifizierte Datenbankdaten hindeuten. Die DB soll vor jeder Testmethode neu initialisiert werden, und eine Nebenläufigkeit von Tests geht natürlich nicht. Aber genau das scheint unter Linux zu erfolgen?! Der Ausgabe nach wird alles im "main-Thread" ausgeführt - aber wie gesagt - ein Fehler der eindeutig auf Unittest-A modifiziert Daten, Unittest-B erwartet andere Daten hindeutet.
Mit folgender pom.xml Einstellung kann ich das Verhindern:
Code:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<reuseForks>false</reuseForks>
<forkCount>1</forkCount>
</configuration>
</plugin>
Problem ist nur.... nun wird jedesmal für jede Testklasse ein WebContext hochgefahren.... mit einem Reuse des Context wäre das ganze wesentlich fixer....
Ich verstehe nicht, warum ich überhaupt die Probleme unter Linux habe, aber nicht unter Windows (getestet mit mvn via cmd.com und mvn via Eclipse)...
Hat einer Ideen?