2009-03-11 17 views
17

Per eseguire i miei test di unità su Eclipse, è necessario impostare alcune proprietà per la VM.Aggiungi automaticamente le proprietà quando si esegue JUnit in Eclipse

Così, quando eseguo il mio test JUnit, vado in "Open Run Dialog", quindi nella mia configurazione JUnit per questo test, vado nella scheda "Arguments" e metto tutto ciò che mi serve negli "argomenti VM" area di testo.

C'è un modo per aggiungere automaticamente un set di proprietà quando eseguo il mio JUnit, quindi potrò solo fare clic destro sulla classe di test, e fare clic su "Esegui come> Test di Junit" per eseguire un test ?

Informazioni tecniche: Eclipse 3.3.2, JUnit 4, Java 5


Modifica, per quanto riguarda la risposta da Aaron Digulla:

Queste proprietà sono utilizzati nei file di configurazione Spring *. Quindi, non posso usare l'idea data da Aaron, poiché Spring verrà inizializzata prima dell'esecuzione del test.

Oltre a ciò, ho solo bisogno di sapere se posso ottenerlo facilmente in Eclipse. Pertanto la soluzione non deve avere alcun impatto sulla compilazione dell'applicazione all'esterno di Eclipse, in quanto la mia applicazione verrà finalmente compilata (e testata) da Maven2.

* alcuni test di "unità" richiedono effettivamente la mia configurazione Spring per essere eseguita. Ok, so che non si tratta di veri e propri test unitari; o)

Modifica 2: In effetti, stavo effettivamente iniziando la configurazione Spring da un'unità di test. Quindi, prima di avviare Spring, controllo le proprietà del sistema e se le mie proprietà non sono impostate, allora fornisco loro il valore richiesto ...

Tuttavia, sono un po 'deluso dal fatto che Eclipse non possa farlo per me automaticamente ...

+0

Tanto per essere espliciti per quanto riguarda i test di primavera. Di quale OP sta parlando quando usa spring è "RunWith (SpringJUnit4ClassRunner.class) e ContextConfiguration" inizierà la primavera prima della junit regolare Prima e BeforeClass vengono colpiti, quindi l'impostazione delle proprietà di sistema in quelle non funzionerà. – sMoZely

risposta

7

La mia soluzione è creare una classe di base di test astratta per tutti i test in un progetto che estende TestCase. Deve essere astratto, quindi il rilevatore automatico di unità non lo considererà.

Nel blocco di codice statico di questa classe, ho impostato tutte le proprietà di cui ho bisogno. Ciò garantisce che il codice venga eseguito una sola volta e che venga eseguito prima di qualsiasi test nel mio progetto.

[EDIT] Si dice che Spring viene inizializzato prima dell'esecuzione dei test. Questo è un bug nel tuo progetto: devono essere i test che inizializzano Spring. Altrimenti, ti imbatterai sempre nel problema che devi testare qualcosa al di fuori del tuo controllo.

Pertanto, suggerisco di spostare il codice di init Spring in un punto in cui è possibile chiamarlo nel momento in cui l'ambiente è pronto.

In alternativa, verificare che l'ambiente sia impostato correttamente in setUp() e generare un errore se manca una proprietà. In questo modo, almeno saprai perché i test falliranno in seguito. Ma preferisco ancora avere il controllo totale quando il sottosistema prende vita. Qualcos'altro implorerà il disastro.

+0

Non riesco a usare la tua idea, come spiegato nel mio Edit (non lo sottovaluta perché non è una cattiva idea, comunque) ... – romaintaz

+2

Sono d'accordo con il blocco di codice statico init. C'è un'altra alternativa: @BeforeClass su un metodo in cui puoi iniziare le tue variabili di sistema. – zeratul021

7

quando voglio impostare alcune voci proprietà per il mio test JUnit a implementare il seguente

protected void setUp() throws Exception { 
     super.setUp(); 

     System.setProperty("Property1", "value1"); 
     System.setProperty("Property2", "value2"); 
} 

Le proprietà sono impostate prima della methode di prova si chiama

EDIT: È anche possibile leggere le proprietà da un file e alle proprietà di sistema

+0

Stessa osservazione della risposta di Aaron Digulla. Non funzionerà se le proprietà vengono utilizzate da Spring ... – romaintaz

+0

È necessario inizializzare tutti i valori e gli oggetti all'interno del metodo di installazione. Altrimenti aggiorna i testicoli. –

1

Non ho mai capito perché le configurazioni di avvio hanno un modo per definire le variabili di ambiente ma l'unico modo per aggiungere una proprietà di sistema sembra essere quello di aggiungere argomenti vm .

Il modo in cui ho lavorato in questo consiste nell'avere un test (o un test astratto di classe base) per verificare la presenza di proprietà richieste, se non ci sono, quindi li carico da un file .properties sul classpath .

Questo funziona come posso ancora ignorarli o specificarli da ANT o Maven, ma è anche possibile fare clic con il pulsante destro del mouse -> Esegui come -> Junit Test dei singoli file di test.

Edit: Ecco un esempio di ottenere primavera opzionalmente carico un file di proprietà nello stesso modo descritto sopra:

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location" value="database.properties"/> 
     <property name="ignoreResourceNotFound" value="true" /> 
     <property name="systemPropertiesMode"> 
      <util:constant static-field="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
     </property> 
</bean> 
26

Si potrebbe provare questo - vai alla

Window->Preferences->Java->Installed JREs 

ans selezionare la JVM in uso, piuttosto che un prametro "Default VM" come

-DrunningInEclipse 

di quanto è possibile controllare da all'interno del tuo TestCase:

System.getProperty("runningInEclipse") != null 
+0

Funziona! Grande! – Wolfgang

+0

Fantastico! Grazie. –

+0

Esiste un modo per specificarlo in base al progetto? – Stewart

1

concordato metodo utilizzato in questo modo in uno dei miei test JUnit e ha funzionato

 


    @BeforeClass 
     public static void setupProperties() { 
      System.setProperty("catalina.base", "C:\\sam-tomcat-7.0.42"); 
     } 

+0

Conosco questa soluzione, ma non ha rispettato le mie esigenze. Volevo avere una soluzione solo per Eclipse. Usando questo, avrà un impatto sulla build "predefinita" di Maven (cioè all'esterno dell'IDE). Inoltre, funziona solo per una classe (o devi fare tutti i tuoi test estende la classe che definisce questo '@ BeforeClass'). – romaintaz

Problemi correlati