Ho un sacco di classi che si occupano della validazione dei valori. Ad esempio, una RangeValidator
classe controlla se un valore è compreso nell'intervallo specificato.
Ogni classe di validazione contiene due metodi is_valid(value)
:, che restituisce True
o False
dipende dal valore e ensure_valid(value)
che verifica un valore specificato e non fa nulla se il valore è valido oppure genera un'eccezione specifica se il valore non corrisponde alle regole predefinite.
Esistono attualmente due test unitari associati a questo metodo:
Quello che passa un valore non valido e garantisce che sia stata generata l'eccezione.
def test_outside_range(self): with self.assertRaises(demo.ValidationException): demo.RangeValidator(0, 100).ensure_valid(-5)
Quello che passa un valore valido.
def test_in_range(self): demo.RangeValidator(0, 100).ensure_valid(25)
Anche se il secondo test fa il suo lavoro - fallisce se viene generata l'eccezione e riesce se ensure_valid
non getta nulla - il fatto che non ci sia assert
dentro sembra strano. Qualcuno che legge tale codice si chiederebbe immediatamente perché esiste un test che sembra non fare nulla.
È una pratica corrente quando si testano metodi che non restituiscono un valore e non hanno effetti collaterali? O dovrei riscrivere il test in modo diverso? O semplicemente metti un commento che spiega cosa sto facendo?
self
riferimento) e non restituisce alcun risultato, non è una funzione pura.
void
in molte lingue e ha regole sciocche). In alternativa, potresti avere un infinito loop (che funziona anche quando "non restituisce alcun risultato" significa in realtà non restituisce risultati.
unit -> unit
in qualsiasi linguaggio che considera l'unità un tipo di dati standard anziché qualcosa di magicamente speciale. Sfortunatamente, restituisce solo unità e non fa nient'altro.