2016-04-15 4 views
1

Ich habe Unterschiede zwischen JUnit-Tests, wenn ich sie in Eclipse laufen und wenn sie von Maven ausgeführt werden todsicherer pluging ein mvn clean install von einem Terminal zu tunWarum sollte mvn clean installieren und eclipse sich in Junit-Tests unterscheiden?

Bei einem Projekt, wenn ich auf erzählt rechts src/test/java in Eclipse, JUnit mich da sind 137 Tests laufen. Doing mvn clean install gibt mir nur 119. Auf dieser einen scheint es, dass Fall in Testname eine mögliche Erklärung sein könnte, einige der Tests nicht mit Kleinbuchstaben beginnen und das macht todsichere sie zu ignorieren, aber gibt es noch eine andere mögliche Erklärung?

Bei einem zweiten Projekt habe ich ein lästigeres Problem: Das gesamte Testpaket wird nicht von mvn clean install ausgeführt. Ich habe 2 Pakete unter src/test/java: com.project und com.project.services. Testklassen unter com.project werden von todsicheren Versionen korrekt ausgeführt, nicht unter com.project.services.

Die einzige Spezifität ich sehen kann, ist Klassen unter com.project.services mehrere Vererbungsebene haben:

public class ActualTestsCasesA extends GenericTestSituationA {} 

public class GenericTestSituationA extends ServicesAbstractTests {} 

public abstract ServicesAbstractTests extends ProjectAbstractTests {} 

ActualTestsCasesA, GenericTestSituationA und ServicesAbstractTests alle unter com.project.services Testpaket sind. ProjectAbstractTests bleibt in einem anderen Maven-Projekt. Hier

ist die Abhängigkeit zu todsicherer Plugin in meinem pom.wml:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.18.1</version> 
      <configuration> 
       <forkMode>always</forkMode> 
       <encoding>${project.build.sourceEncoding}</encoding> 
       <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding> 
      </configuration> 

     </plugin> 
+0

hilft 'mvn help: effective-pom' verschiedene Ergebnisse zurück, wenn sie in jeder Umgebung ausgeführt werden? –

+0

Betrachtet man die Eclipse Effective Pom Registerkarte auf der pom.xml, ist der Surefire-Plugin Teil auf beiden Seiten gleich. –

+1

Überprüfen Sie die Namen Ihrer Komponententests. Folgst du der Namenskonvention von Unit-Tests wie '* Test.java *'? – khmarbaise

Antwort

1

Wie Sie bereits entdeckt, todsicheren hat eine spezifische Namenskonvention, wenn Tests ausgeführt werden. Sie können jedoch zusätzliche naminig-Konventionen konfigurieren, die den Testdateinamen Ihres Projekts entsprechen. Dies ist hilfreich für Legacy-Tests, die möglicherweise nicht dem Maven-Standard entsprechen, oder für eine große Anzahl von Testklassen, die Sie lieber nicht umgestalten möchten.

Überprüfen Sie die todsichere Dokumentation für Details aus: http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html

In Ihrem Fall könnten Sie todsichere so konfigurieren, dass Testklassen mit zusätzlichen Mustern gehören etwa so:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.18.1</version> 
      <configuration> 
       <forkMode>always</forkMode> 
       <encoding>${project.build.sourceEncoding}</encoding> 
       <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding> 
      <includes> 
        <include>**/*Tests*.*</include> 
        <include>**/*TestSituation*.*</include> 
      </includes> 
      </configuration> 

     </plugin> 

Eclipse jedoch nicht gebunden durch solche Einschränkungen. Stattdessen basiert es auf der Existenz der Junit4-Bibliothek, um Tests auszuführen, und ermöglicht es jUnit selbst festzustellen, ob eine Klasse als ausführbarer Test betrachtet wird oder nicht. Weitere Informationen finden Sie unter Eclipse Mars docs.