Tengo un montón de clases que se ocupan de la validación de valores. Por ejemplo, una RangeValidator
clase verifica si un valor está dentro del rango especificado.
Cada clase de validador contiene dos métodos: is_valid(value)
que devuelve True
o False
depende del valor, y ensure_valid(value)
que busca un valor específico y no hace nada si el valor es válido o arroja una excepción específica si el valor no coincide con las reglas predefinidas.
Actualmente hay dos pruebas unitarias asociadas con este método:
El que pasa un valor no válido y asegura que se lanzó la excepción.
def test_outside_range(self): with self.assertRaises(demo.ValidationException): demo.RangeValidator(0, 100).ensure_valid(-5)
El que pasa un valor válido.
def test_in_range(self): demo.RangeValidator(0, 100).ensure_valid(25)
Aunque la segunda prueba hace su trabajo, falla si se lanza la excepción y tiene éxito si ensure_valid
no arroja nada, el hecho de que no haya assert
s adentro parece extraño. Alguien que lea dicho código se preguntará de inmediato por qué hay una prueba que parece no estar haciendo nada.
¿Es esta una práctica actual cuando se prueban métodos que no devuelven un valor y no tienen efectos secundarios? ¿O debería reescribir la prueba de una manera diferente? ¿O simplemente poner un comentario explicando lo que estoy haciendo?
self
referencia) y no devuelve ningún resultado, no es una función pura.
void
en muchos idiomas y tiene reglas tontas). Alternativamente, podría tener un infinito loop (que funciona incluso cuando "no devuelve ningún resultado" realmente significa que no devuelve ningún resultado.
unit -> unit
en cualquier idioma que considera la unidad como un tipo de datos estándar en lugar de algo mágicamente especial. Desafortunadamente, solo devuelve la unidad y no hace nada más.