Ho una classe di test parametrizzata con una serie di test unitari che generalmente controllano la creazione di messaggi e-mail personalizzati. In questo momento la classe ha un sacco di test che dipendono dal/i fattore/i utilizzato in classe parametrizzata, il flusso dei test è lo stesso per ogni test. L'esempio di un test:Se dichiarazioni nei test
@Test
public void testRecipientsCount() {
assertEquals(3, recipientsCount);
}
ho dovuto aggiungere funcionality in più per la mia classe di posta elettronica che aggiunge alcune e-mail interne in più per l'elenco dei destinatari, e che succede solo per alcuni dei casi e che porta al mio problema .
Diciamo che voglio affermare la quantità di messaggi creati. Per il vecchio test era lo stesso per ogni caso, ma ora è diverso a seconda dei casi. Il modo più intuitivo per me è stato quello di aggiungere istruzioni if:
@Test
public void testRecipientsCount(){
if(something) {
assertEquals(3, recipientsCount);
}
else {
assertEquals(4, recipientsCount);
}
}
...
ma il mio più esperto collega dice che dovremmo evitare di IFS a classi di test (e io kinda d'accordo su questo).
Ho pensato che il test di suddivisione su due classi di test potesse funzionare, ma che avrebbe portato a un codice ridondante in entrambe le classi (devo ancora verificare se sono stati creati messaggi non originali, le loro dimensioni, contenuto ecc.) E un poche righe aggiunte per uno di loro.
La mia domanda è: come faccio a fare questo in modo da non usare if o carichi di codice ridondante (non usare la classe parametrizzata produrrebbe un codice ridondante ancora più)?
'aggiunge qualche extra email interne alla lista dei destinatari'. Questa lista di indirizzi interni è stata inserita nella classe? Se è così, basta cancellare l'elenco per la maggior parte dei test e avere uno o due test 'testInternalMail' che compilano tale elenco –
Non penso sia possibile con la classe di test parametrizzata. Sono stati aggiunti i casi di test suggeriti per ogni serie di argomenti e le asserzioni sarebbero diverse per alcuni. La tua soluzione funzionerebbe senza classe Parametrized, ma voglio evitarlo. – Raidmaster
Potresti cambiare il codice postato in una classe di test più completa (ma ancora piccola e falsa), in modo che possiamo capire come impostare i parametri? –