2012-05-08 19 views
17

Mam słoik w moim repozytorium maven, który zawiera testy junit, które powinny być uruchamiane w różnych projektach, ponieważ jest w stanie sprawdzić projekt i przetestować pewne jego cechy. Unforunately surefire nie pobiera testów zawartych w słoiku, tak jak ten Feature Request shows.Uruchamiaj testy JUnit zawarte w słoju zależności za pomocą Maven Surefire

W żądaniu operacji proponują rozpakowanie słoika, który następnie zostanie wykonany przez surefire.

Pomyślnie rozpakowałem słoik przy użyciu wtyczki zależnej od maven-dependency, ale zawarte testy nie są wykonywane. To jak ja skonfigurowany maven zależność plugin rozpakować mój słoik:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>unpack</id> 
      <phase>process-test-classes</phase> 
      <goals> 
       <goal>unpack</goal> 
      </goals> 
      <configuration> 
       <artifactItems> 
        <artifactItem> 
         <groupId>de.mwx.test</groupId> 
         <artifactId>selenium-test-base</artifactId> 
         <version>0.1</version> 
         <overWrite>true</overWrite> 
          <outputDirectory> 
           ${project.build.directory}/classes 
          </outputDirectory> 
        </artifactItem> 
       </artifactItems> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Każda pomoc będzie appriciated.

+1

Dlaczego testy w innym słoika? Czy są to testy dla twojego projektu, czy innego? Jeśli inny, dlaczego je prowadzisz? Jeśli dla Twojej aplikacji, dlaczego nie są one w twoim projekcie? –

+0

Drugi słoik jest w rzeczywistości szkieletem testowym, który działa na bieżącym projekcie i wykonuje różne zadania. Wydawało mi się, że jest to najbardziej modularny sposób: ale sądzę, że nie było to zamierzone użycie dla pewności. – devsnd

+1

Jednak projekty już definiują standard dla testów projektu. I IMO nie ma sensu uzależniać projektu od jego testów - jeśli cokolwiek, testy byłyby zależne od testowanego modułu, ponieważ testy wykorzystują moduł, ale nie odwrotnie. –

Odpowiedz

28

jest nowy sposób prowadzenia testu w Maven z innego słoika. from maven-surefire-plugin wersja 2.15 możesz powiedzieć mavenowi, aby przeskanował twoje słoiki testowe pod kątem testów i uruchom je. Nie trzeba wyodrębniać słoika testów. Wystarczy dodać zależność do słoika i testu:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.15</version> 
     <configuration> 
      <dependenciesToScan> 
       <dependency>test.jar.group:test.jar.artifact.id</dependency> 
      </dependenciesToScan> 
     </configuration> 
    </plugin> 

wziął ten materiał od https://gist.github.com/aslakknutsen/4520226 I https://issues.apache.org/jira/browse/SUREFIRE-569

+0

Działa doskonale, dziękuję za ten dodatek. –

+1

Pracował jak urok! Nawet podczas określania zależności od testowego słoika (z testami ) – mac

1

Jak opisano w numerze, musisz mieć Suite, który znajduje się w twoim projekcie, który NIE jest umieszczony w słoju testowym.

+0

Tak, to jest projekt, o którym mówię. Zmienię moje pytanie, aby wyjaśnić tę kwestię. – devsnd

+1

Proponuję użyć katalogu test-classes zamiast folderu classes jako outputDirectory. – khmarbaise

+0

TAK! To było to. Dziękuję Ci. – devsnd

2

(To jest właśnie przekształcenie tego, co jest w komentarzu powyżej z khmarbaise, ale ponieważ nie została wyjaśniona, myślę, że warto przekształcenie):

pomocą katalogu test-klasy zamiast folder klasy jako OutputDirectory :

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>unpack</id> 
      <phase>process-test-classes</phase> 
      <goals> 
       <goal>unpack</goal> 
      </goals> 
      <configuration> 
       <artifactItems> 
        <artifactItem> 
         <groupId>de.mwx.test</groupId> 
         <artifactId>selenium-test-base</artifactId> 
         <version>0.1</version> 
         <overWrite>true</overWrite> 
          <outputDirectory> 
           ${project.build.directory}/test-classes 
          </outputDirectory> 
        </artifactItem> 
       </artifactItems> 
      </configuration> 
     </execution> 
    </executions> 
</plugin>