Ho una serie di test che hanno bisogno di un database per essere eseguito. Voglio creare il database all'inizio della loro esecuzione e rimuoverlo alla fine.
Da Maven ho anche aggiunto un RunListener al plugin maven-surefire e funziona correttamente. E ho anche aggiunto una variabile di proprietà di sistema denominata ismaven. Quando eseguo il test da parte di Maven, questa variabile viene inizializzata ma quando eseguo i test da Eclipse, questa variabile è null (accesso alla variabile con System.getProperty).
<configuration>
<properties>
<property>
<name>listener</name>
<value>com.mycompany.MyRunListener</value>
</property>
</properties>
<systemPropertyVariables>
<ismaven>true</ismaven>
</systemPropertyVariables>
</configuration>
Tutti i miei test di database ereditare da una classe che ha un @BeforeClass e un metodi @AfterClass. Questi metodi controllano se il test viene eseguito da Maven o da Eclipse controllando il valore della proprietà ismaven. Se il test viene eseguito da Maven, la proprietà ismaven ha un valore e fanno qualsiasi cosa. Ma è il test viene eseguito dal Eclipse, la variabile ismaven è nullo e si avvia (@BeforeClass) o si ferma (@AfterClass) il database:
@BeforeClass
public static void checkIfStartDatabase() {
String ismaven = System.getProperty("ismaven");
// If it is not maven, start the database
if (ismaven == null) {
startDatabase();
}
}
@AfterClass
public static void checkIfStopDatabase() {
String ismaven = System.getProperty("ismaven");
// If it is not maven, stop the database
if (ismaven == null) {
stopDatabase();
}
}
Questa soluzione non risolve il 100% la vostra problema ma se lo si implementa è possibile eseguire (ed eseguire il debug) tutti i test di una classe JUnit utilizzando Eclipse e si possono anche eseguire tutti i test del progetto usando Maven con la garanzia che si eseguirà una volta un pezzo di codice prima o dopo l'esecuzione di tutti i tuoi test.
fonte
2014-10-03 08:20:10
Questo non è esattamente quello che ho cercato, perché non mi piace aumentare la complessità dell'implementazione del test per la registrazione. Volevo aggiungere la registrazione al di fuori dei test, ma la soluzione è la migliore finora e il risultato alla fine è come desiderato. Segnalo questa risposta come la soluzione. –