Olá, Fabio. Tudo belezinha?
Existe um problema nessa abordagem que você pensou. No projeto, o método que calcula a idade, utiliza a mesma lógica desse trecho de código que você sugeriu. E não devemos testar um método repetindo a lógica de sua implementação. Desse modo, não seria uma boa prática escrever o teste assim.
Uma forma de solucionar isso pode ser utilizando a biblioteca freezegun
do Python. Essa biblioteca nos permite "congelar" o tempo, assim quando executarmos o nosso teste, ele utilizará a data que especificarmos.
Para instalar o freezegun
basta usar o comando:
pip install freezegun
Desse modo, no teste podemos definir a data que desejarmos, e toda vez que o código de teste for executado, ele vai considerar para aquele teste em específico a data que definimos e não a data atual de fato.
Podemos implementar isso de duas maneiras. Primeiramente, devemos importar a biblioteca:
from freezegun import freeze_time
A primeira forma é por meio do decorator @freeze_time
do freezegun
, que pode ser utilizado em classes ou métodos. O teste ficaria da seguinte maneira:
@freeze_time("2022-12-08")
def test_quando_idade_recebe_13_03_2000_deve_retornar_22(self):
entrada = '13/03/2000'
esperado = 22
funcionario_test = Funcionario('Teste', entrada, 1111)
resultado = funcionario_test.idade()
assert resultado == esperado
Outra forma é por meio da cláusula with
dentro de um método, para utilizar uma data específica em alguma asserção. O teste ficaria assim:
def test_quando_idade_recebe_13_03_2000_deve_retornar_22(self):
entrada = '13/03/2000'
esperado = 22
funcionario_test = Funcionario('Teste', entrada, 1111)
resultado = funcionario_test.idade()
with freeze_time("2022-12-08"):
assert resultado == esperado
Assim, quando o teste é executado, ele considera a data definida pelo freeze_time
e não a data atual. Desse modo, utilizar esse recurso para especificar a data com alguma data do ano atual, fará com que mesmo com o passar dos anos, o teste continue funcionando.
Espero ter ajudado. Qualquer outra dúvida estou a disposição.
Abraços. Bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!