Primo Maven-Fail-Plug viene eseguito di default in un'altra fase del ciclo di vita (test di integrazione) come fa maven-surefire-plugin (test). Inoltre è possibile configurare il plugin maven-failsafe per eseguire l'obiettivo verify
nella fase di test post-integration-test
se si desidera verificare se i test di integrazione hanno avuto esito negativo. Questo può essere configurato liberamente.
C'è una domanda che mi viene in mente. Hai 10 moduli e ora ti piacerebbe avere test di integrazione? A quale modulo appartengono? Quindi è meglio avere un modulo separato perché non appartengono a nessuno dei 10 moduli.
A parte questo, il plug-in maven-surefire è già configurato nel ciclo di vita predefinito. Sì, un obiettivo supplementare sarebbe un'idea, ma confonderebbe l'utente a utilizzare gli stessi plugin in relazioni diverse. Quindi la separazione delle preoccupazioni è importante qui. A parte le intere configurazioni di default ... Quei plugin condividono una base di codice più grande, ma ci sono differenze ...
Anche ciò che è già stato menzionato da Tunaki è pre-integration-test
, per le cose di impostazione come i server ecc integration-test
e cose del genere chiudendo giù servizi/server nella fase post-integration-test
. Questo non succederà mai nei test unitari.
L'utilizzo di un modulo separato semplifica in genere la configurazione dell'IT, il che significa avere dipendenze diverse (classpath) rispetto ai test dell'unità. Ad esempio cose come Arquillian.org che non vengono mai utilizzate nei test unitari. Questo non può essere gestito in un singolo modulo ... anche qui va bene la separazione dei problemi ..
Inoltre i test di integrazione non possono essere parallati di default mentre i test di unità possono essere per definizione altrimenti non test di unità.
Quindi, per quanto riguarda il layout delle cartelle? Nel modulo di test di integrazione puoi semplicemente utilizzare la cartella src/test/java
, il che significa che non hai bisogno di configurazioni supplementari ecc. (Ad esempio tramite build-helper-maven-plugin ecc.) Che rende più semplice e segue più la convenzione sul paradigma di configurazione.
e non dimenticare si può controllare meglio ciò che è in esecuzione nella vostra build (CI) ..
E un altro importante suggerimento. Solitamente i test di integrazione sono spesso correlati all'infrastruttura, quindi a volte può essere utile ignorare i guasti che possono semplicemente gestire utilizzando l'obiettivo check
del plugin maven-failsafe ....
Un esempio per un modulo IT può essere trovato here.
Quello che hai menzionato non è pulito è corretto perché quelli IT ottengono il classpath come test dell'unità che potrebbe non essere quello che ti piace. Quindi è meglio avere un modulo separato completo che contenga gli IT. Localizzali usando 'src/test/java' e segui la convenzione di denominazione per gli IT come hai già detto. – khmarbaise
@khmarbaise: Grazie per la spiegazione, apprezzo che venga direttamente da uno degli autori del progetto Apache Maven! Capisco quello che stai dicendo, anche se non sono del tutto d'accordo sul fatto che se lo avessi in una directory diversa, le tue dipendenze '' test ' 'saranno diverse. Non lo saranno. Ciò che anch'io non capisco, (nonostante abbia letto abbastanza sull'argomento), è - perché ci deve essere un plugin separato per questo in questo caso? Potrebbe esserci stato semplicemente un altro obiettivo per 'maven-surefire-plugin' che sarebbe stato richiamato durante la fase di test di integrazione? – carlspring