J'ai un tas de classes qui traitent de la validation des valeurs. Par exemple, une RangeValidator
classe vérifie si une valeur se situe dans la plage spécifiée.
Chaque classe de validateur contient deux méthodes is_valid(value)
:, qui renvoie True
ou en False
fonction de la valeur, et ensure_valid(value)
qui vérifie une valeur spécifiée et soit ne fait rien si la valeur est valide, ou lève une exception spécifique si la valeur ne correspond pas aux règles prédéfinies.
Il existe actuellement deux tests unitaires associés à cette méthode:
Celui qui transmet une valeur non valide et garantit que l'exception a été levée.
def test_outside_range(self): with self.assertRaises(demo.ValidationException): demo.RangeValidator(0, 100).ensure_valid(-5)
Celui qui passe une valeur valide.
def test_in_range(self): demo.RangeValidator(0, 100).ensure_valid(25)
Bien que le deuxième test fasse son travail - échoue si l'exception est levée et réussit s'il ensure_valid
ne lance rien - le fait qu'il n'y ait pas de assert
s à l'intérieur semble étrange. Quelqu'un qui lit un tel code se demanderait immédiatement pourquoi il existe un test qui semble ne rien faire.
Est-ce une pratique courante lors du test de méthodes qui ne renvoient pas de valeur et n'ont pas d'effets secondaires? Ou dois-je réécrire le test d'une manière différente? Ou simplement mettre un commentaire expliquant ce que je fais?
self
référence) et ne renvoie aucun résultat, ce n'est pas une fonction pure.
void
dans de nombreuses langues et a des règles stupides.) Alternativement, vous pouvez avoir une infinité boucle (qui fonctionne même lorsque "ne renvoie aucun résultat" signifie vraiment ne renvoie aucun résultat.
unit -> unit
dans n'importe quelle langue qui considère l'unité comme un type de données standard au lieu de quelque chose de magique. Malheureusement, il retourne juste l'unité et ne fait rien d'autre.