ExpertiDict

C# · Avançado · Inglês · Técnico

TimeProvider

/taɪm prəˈvaɪdɚ/substantivo

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.

Veja também

Todos os termos de C#