Devo utilizzare le stesse variabili attraverso intera Unità di Test?

0

Domanda

Io sono la creazione di Unità di Test in Java e per ogni metodo, mi crea lo stesso liste, variabili, etc. D'altra parte, naturalmente, ho pensato di creare tutte queste variabili come globali e impostare i valori nel setup() metodo (in @Before), ma non sono sicuro se i valori possono essere modificati durante l'esecuzione dei test a causa di multithreading, etc. Quindi, qual è il modo migliore per questa situazione?

java junit junit5 testing
2021-11-23 13:33:22
1

Migliore risposta

2

Nulla di cui preoccuparsi. JUnit crea una nuova istanza della classe di test, e quindi eseguire ogni @Before metodo, e solo allora eseguire il @Test metodo, e che canzone e danza di routine di nuovo il tutto per ogni @Test metodo annotato in quella classe. Stai usando @Before esattamente come è stato inteso: È per la memorizzazione di codice di inizializzazione che è obbligatorio per tutti i test in che classe di test.

JUnit fa in questo modo perche 'il test di indipendenza" è bello avere: Test, preferibilmente, di non riuscire o di passare indipendente dall'ordine in cui li esegue.

Ogni tanto, il processo di init è così costoso che non vale la pena di pagare il "costo" dell'esecuzione di esso più e più volte per ogni test. L'annotazione @BeforeClass esiste appositamente per tale scopo. Il javadoc di @BeforeClass incantesimi che questo compromette la prova di indipendenza e, pertanto, dovrebbe essere utilizzato solo se il programma di installazione di lavoro all'interno di tale metodo è sufficientemente costoso (informaticamente o altro) per fare questo compromesso.

In altre parole:

Le preoccupazioni relative ai test di indipendenza sono reali, ma si applicano a @BeforeClass. @Before non soffrono di questo problema; che il codice viene eseguito nuovamente per ogni test.

NB: Si può buttare tutto questo fuori dalla finestra, se si dispone di static cose. Non sono statici roba in codice di test, a meno che tu non sappia cosa stai facendo. Presumo che tu non hai, che in questo caso - carry in, i test siano indipendenti.

2021-11-23 13:38:26

Grazie mille, qualche codice di esempio che mostra il corretto utilizzo?
rzwitserloot

Non ho capito la differenza tra @BeforeClass e @Before. Per qualsiasi chiarimento pls?
Amadán

tutti i metodi con @Before vengono eseguiti prima di ogni test. Tutti i metodi con @BeforeClass vengono eseguite una sola volta, prima di qualsiasi prova. In generale, è possibile impostare static roba con @BeforeClass che è poi ri-utilizzato (quindi, le prove non sono più indipendenti). Si imposta non statico roba con @Beforee , quindi, le prove sono indipendenti. Basta leggere i documenti per queste annotazioni.
rzwitserloot

@BeforeClass (JUnit 5: @BeforeAll) viene eseguito una volta per tutta la classe di test @Before (JUnit 5: @BeforeEach) viene eseguito prima di ogni singolo metodo di prova.
rzwitserloot

Io uso JUnit5, poi vedo la differenza tra @BeforeEach vs @BeforeAll bene, dalle tue spiegazioni. Tuttavia, io non sono sicuro se dovrei o non chiare le liste che sono utilizzati da più di un test. Ho ay bisogno di risolverli in @AfterEach. Qualche idea?
avandeursen

Non cancellare l'elenco. Suona anche come si dovrebbe giocattolo in giro con questo un po', perché, evidentemente, di un MODO di risposta non è sufficiente per voi. Questo è un buon istinto! Solo.. fare delle prove, aggiungere alcuni elementi di un elenco inizializzata una sola volta in @Beforee la stampa di alcune cose - senza rimuovere nulla. Poi basta osservare cosa succede.

Sì, potrebbe essere giocato, ma penso che sia davvero una situazione comune e ci deve essere un approccio generale per che. Così, ho solo bisogno di un chiarimento circa l'Unità di Test convenzione per la ri-utilizzando le stesse variabili (ad es. la definizione di una volta in @BeforeEach O @BeforeAll, cancella le variabili su @AfterEach. Quindi, qual è l'approccio corretto per questa situazione?. Qualche idea?

Utilizzare @Before. Non ho idea di quello che potrebbe ancora essere fonte di confusione, a questo punto. La risposta incantesimi fuori!

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................