2013-05-28 13 views

Odpowiedz

26

pierwsze nie należy uruchamiać te test integracji poprzez Testlife cycle powodują pre-integracyjny test, integracji test i post-integracja testowej fazy cyklu życie istnieje. Poza tym dla testów integracyjnych odpowiedzialny jest maven-failsafe-plugin.

Istnieje kilka opcji postępowania z sytuacjami. Najpierw należy postępować zgodnie naming conventions integracji testuje

<includes> 
<include>**/IT*.java</include> 
<include>**/*IT.java</include> 
<include>**/*ITCase.java</include> 
</includes> 

co oznacza umieścić testy integracji z domyślnego folderu src/test/java. Jeśli masz budowę wielomodułową, najlepiej byłoby mieć osobny moduł, który zawiera tylko testy integracji lub możesz przejść ścieżką, w której zdecydowałeś się użyć oddzielnego folderu (co nie jest najlepsze):

Pierwsza trzeba dodać folder przy użyciu buildhelper-maven-plugin aby te testy integracyjne są zestawiane tak:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.9.1</version> 
    <executions> 
     <execution> 
     <id>add-test-source</id> 
     <phase>process-resources</phase> 
     <goals> 
      <goal>add-test-source</goal> 
     </goals> 
     <configuration> 
      <sources> 
      <source>src/integration-test/java</source> 
      </sources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

i trzeba konfiguracji maven-failsafe-plugin tak:

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-failsafe-plugin</artifactId> 
     <version>2.14.1</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>integration-test</goal> 
       <goal>verify</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

Po masz skonfigurowane, możesz uruchomić integra Testy tion przez:

mvn verify 
+0

tylko zastanawiasz się, czy w teście po integracji nie ma nic, czy byłoby równie ważne użycie 'testu integracji mvn'? – vikingsteve

+0

Tak, to będzie działało, ale sugerowałbym, aby zawsze używać 'mvn verify', który jest po zakończeniu integracji i zapewnia, że ​​uruchomi się faza post-integracyjna. – khmarbaise

13

@khmarbaise ma rację z jego zalecenia (więc +1 do tego), ale chcę, aby odpowiedzieć na to pytanie bez spekulacje na temat powodów, dla których źródłem badanie znajdujących się gdzieś indziej.

Jeśli twoje testy znajdują się w innym katalogu niż standardowy katalog src/test/java, najprostszym rozwiązaniem jest zmiana domyślnej wartości parametru konfiguracyjnego testSourceDirectory zdefiniowanego w Super POM.

np. dla src/foobar/java używać

<build> 
    <testSourceDirectory>src/foobar/java</testSourceDirectory> 
</build> 

następnie można po prostu uruchomić mvn test wykonać testy.


Bardziej skomplikowane rozwiązanie ...

Jeśli nie chcesz, aby zmienić konfigurację pom.xml można specifiy parametr testSourceDirectory w linii poleceń jak poniżej:

mvn -DtestSourceDirectory=src/foobar/java clean test 

Ale upewnij się, że twoje źródła zostały skompilowane.W przeciwnym razie nie zostaną znalezione i wykonane. W powyższym przykładzie źródła testowe nie są umieszczone w miejscu, które zostanie skompilowany domyślnie, więc mimo wszystko trzeba zmienić pom i dodać katalog do listy źródeł testowych za pomocą buildhelper wtyczki:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
      <id>add-test-source</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>add-test-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
        <source>src/foobar/java</source> 
       </sources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Jeśli nie chcesz zmieniać konfiguracji wartości domyślnej w pom i nie chcesz przekazywać nowego katalogu w linii poleceń, musisz skonfigurować ścieżkę w wtyczce maven-buildhelper i wtyczce maven-surefire w twoim pom .xml tak:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <version>1.8</version> 
      <executions> 
       <execution> 
        <id>add-test-source</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>add-test-source</goal> 
        </goals> 
        <configuration> 
         <sources> 
          <source>src/foobar/java</source> 
         </sources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.14.1</version> 
      <configuration> 
       <testSourceDirectory>src/foobar/java</testSourceDirectory> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

teraz znowu proste wykorzystanie mvn test będzie exec wykonaj test w nietypowej lokalizacji.

+0

Jak już wspomniano w pytaniu mówimy o testach integracyjnych i * nie * o testach jednostkowych, więc zmiana konfiguracji wtyczki maven-surefire, która jest odpowiedzialna za testy jednostkowe, jest zła. Lepiej używaj pluginu maven-failsafe, który jest przeznaczony do testów integracyjnych. Poza tym na podstawie sugerowanej zmiany testy integracyjne byłyby przeprowadzane podczas cyklu życia testu, co jest sprzeczne z konwencjami Maven. – khmarbaise

+0

@khmarbaise Jak już wskazałem, podążam za twoją rekomendacją i daję +1. Ale tytuł pytania brzmi: "Jak uruchomić ** UnitTests ** ..._, a jedyną wskazówką dla testu integracji jest nazwa katalogu, który jest używany do kodu testowego (nie mogę znaleźć miejsca, w którym @KS MANOJ wskazuje, że uruchamia test integracji i że mówi o wtyczce failafe). Myślę więc, że podałem sensowną odpowiedź na proste pytania, jak uruchomić testy w innym folderze niż domyślny (_Ale mam swoje testy w innym folderze ..._). – FrVaBe

+0

@khmarbaise Nawiasem mówiąc, moje rozwiązanie nie wpływa na wykonanie mylnego lub awaryjnego wtyczki (np. Działa w innym cyklu życia). Bez względu na to, jaką konwencję nazywania użył @K S MANOJ lub jakakolwiek konfiguracja wtyczki zrobił (nie wiemy ...), zmiana domyślnego folderu dla źródeł testowych nie zmieni żadnego z tych ustawień, a kompilacja zostanie uruchomiona zgodnie z konfiguracją @K S MANOJ. – FrVaBe

Powiązane problemy