C# · Avançado · Inglês · Técnico
TimeProvider
Classe abstrata do .NET 8 que abstrai o relógio e os timers. Injetá-la no lugar de DateTime.UtcNow permite trocar o tempo por um falso em testes.
Onde usar
Aparece em código que depende da hora atual, como expiração de tokens e agendamento. Em produção use TimeProvider.System, e em testes o FakeTimeProvider do pacote Microsoft.Extensions.TimeProvider.Testing, avançando o tempo à vontade.
Em código
class Token(TimeProvider relogio)
{
readonly DateTimeOffset _ate
= relogio.GetUtcNow().AddMinutes(5);
public bool Expirou()
=> relogio.GetUtcNow() > _ate;
}
// new Token(TimeProvider.System)Exemplos
Inject a TimeProvider so we can fake the clock.
Injete um TimeProvider para podermos simular o relógio.
The test advances the FakeTimeProvider by five minutes.
O teste avança o FakeTimeProvider em cinco minutos.
Cuidado
Não chame DateTime.Now direto em regras de negócio: o teste fica dependente do relógio real e instável.