Ho un sacco di classi che trattano la convalida dei valori. Ad esempio, una classe RangeValidator
controlla se un valore rientra nell'intervallo specificato.
Ogni classe di validatori contiene due metodi: is_valid(value)
, che restituisce True
o False
a seconda del valore e ensure_valid(value)
che verifica un valore specificato e non fa nulla se il valore è valido, o genera un'eccezione specifica se il valore non corrisponde alle regole predefinite.
Al momento esistono due test unitari associati a questo metodo:
-
Quello che passa un valore non valido e garantisce che l'eccezione sia stata lanciata.
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 lanciata l'eccezione, e succede se ensure_valid
non lancia nulla - il fatto che non ci sia assert
s all'interno sembra strano. Qualcuno che legge tale codice si chiederebbe immediatamente perché c'è un test che appare per non fare nulla.
Questa è una pratica corrente quando si testano metodi che non restituiscono un valore e non hanno effetti collaterali? O dovrei riscrivere il test in un modo diverso? O semplicemente metti un commento che spiega cosa sto facendo?