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?
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.
@BeforeClass
e @Before
. Per qualsiasi chiarimento pls? @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 @Before
e , quindi, le prove sono indipendenti. Basta leggere i documenti per queste annotazioni. @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. @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? @Before
e la stampa di alcune cose - senza rimuovere nulla. Poi basta osservare cosa succede. @AfterEach
. Quindi, qual è l'approccio corretto per questa situazione?. Qualche idea? @Before
. Non ho idea di quello che potrebbe ancora essere fonte di confusione, a questo punto. La risposta incantesimi fuori!