Eu tenho um monte de classes que lidam com validação de valores. Por exemplo, uma RangeValidatorclasse verifica se um valor está dentro do intervalo especificado.
Toda classe de validador contém dois métodos is_valid(value):, que retorna Trueou Falsedepende do valor, e ensure_valid(value)que verifica um valor especificado e não faz nada se o valor for válido ou lança uma exceção específica se o valor não corresponder às regras predefinidas.
Atualmente, existem dois testes de unidade associados a este método:
Aquele que passa um valor inválido e garante que a exceção foi lançada.
def test_outside_range(self): with self.assertRaises(demo.ValidationException): demo.RangeValidator(0, 100).ensure_valid(-5)Aquele que passa um valor válido.
def test_in_range(self): demo.RangeValidator(0, 100).ensure_valid(25)
Embora o segundo teste faça seu trabalho - falha se a exceção é lançada e é bem-sucedido se ensure_validnão lança nada - o fato de não haver asserts dentro parece estranho. Alguém que lê esse código imediatamente se pergunta por que existe um teste que parece não estar fazendo nada.
Essa é uma prática atual ao testar métodos que não retornam um valor e não têm efeitos colaterais? Ou devo reescrever o teste de uma maneira diferente? Ou simplesmente faça um comentário explicando o que estou fazendo?
selfreferência) e não retorna resultado, não é uma função pura.
voidem muitos idiomas e tem regras tolas). Como alternativa, você pode ter um número infinito loop (que funciona mesmo quando "não retorna resultados" realmente significa que não retorna resultados).
unit -> unitem qualquer idioma que considera a unidade um tipo de dados padrão em vez de algo magicamente especial. Infelizmente, apenas retorna a unidade e não faz mais nada.