2015-04-13 20 views
5

Per rendere i moduli meno dipendenti da versioni specifiche, vorrei testare i moduli con diverse versioni delle dipendenze in modo da poter determinare gli "angoli" della versione box che il modulo funzionerà felicemente inTest delle versioni delle dipendenze in maven

ad es. il modulo è integrato nella libreria foo.bar 2.1.2. Quindi lo strumento dovrebbe testare 2.0.0 e se fallisce le versioni intermedie come git bisect. Quindi simile tra 2.1.2 e qualunque sia l'ultima versione. Quindi fallo con la prossima dipendenza.

Ho scoperto che spesso è piuttosto semplice estendere l'intervallo di versioni modificando il modo in cui viene utilizzata la libreria. Quando si esegue la distribuzione su un contenitore OSGi, l'esecuzione di un ampio set di versioni per dipendenza rende la vita molto meno dolorosa. Tuttavia, testare manualmente così tante combinazioni è un vero incubo.

Qualcuno sa di tale strumento in modo che possa essere eseguito su un server CI di notte?

PS: So che un tale strumento avrebbe tutti i tipi di bordi e imperfezioni. Voglio solo ridurre la quantità di ipotesi che vengono fatte implicitamente quando si costruiscono moduli. I test normali cattureranno comunque questi casi bizzarri.

+0

Che cosa intendi per "testare tutte le combinazioni"? Tutte le combinazioni di dipendenze o una dipendenza VS un insieme di contenitori? – Gimby

+0

Non penso sia utile testare tutte le combinazioni. Trova la versione più piccola e più grande della versione del POM che supera ancora i test. Il test su più contenitori può quindi essere fatto sulla base di questi risultati. –

+1

È una domanda molto interessante, ma ho difficoltà a trovare lo scope. In particolare, ho problemi con il fatto che non ci sono solo "dipendenze", Maven è costruito attorno all'idea di dipendenze transitorie che non si definiscono nemmeno nei propri poms. Una dipendenza generalmente si traduce in un host di dipendenze - con versioni molto specifiche. – Gimby

risposta

1

Usa Jenkins Matrix Progetto Plugin - vedi https://wiki.jenkins-ci.org/display/JENKINS/Building+a+matrix+project

Nella tua pom.xml definiscono la versione come una proprietà.

<properties> 
    <my.version>1.30</my.version> 
</properties> 
... 
<dependency> 
    <groupId>com.acme</groupId> 
    <artifactId>my-artifact</artifactId> 
    <version>${my.version}</version> 
</dependency> 

Quindi fornire una versione di prova con ogni iterazione della matrice Jenkins.

mvn test -Dmy.version=1.31 
+0

Grazie, non ero a conoscenza di questo. Non sta andando a cercare le versioni, ma potrebbe essere un approccio pragmatico fino a quando non verrà trovato qualcosa di fantasioso. Con un sacco di dimensioni questo potrebbe andare fuori controllo, in quanto il numero di combinazioni è O (2^m) con il numero di dipendenze da testare. (in pratica mezza dozzina). –

Problemi correlati