FreezeClock es uno de esos atributos maravillosos de XUnit.NET, nos permite “congelar” el reloj (tal como lo dice su nombre) en un tiempo dado y de esa manera comprobar que operaciones que dependen de tiempo se lleven acabo exitosamente. En versiones anteriores a la 1.5 FreezeClock cambiaba el tiempo mostrado por DateTime.Now, pero esto causaba problemas con ciertas implementaciones, así que en XUnit.NET 1.5 se debe utilizar la clase Clock y su propiedad Now (Clock.Now) en vez de DateTime.Now para efectos de las pruebas, de igual manera podríamos ver a Clock.Now como un clon de DateTime.Now en todos sus sentidos.
[Fact]
public void It_should_fail_because_clock_are_not_frozen()
{
var clock1 = Clock.Now;
Thread.Sleep(1000);
var clock2 = Clock.Now;
Assert.NotEqual(clock1, clock2);
}
[Fact, FreezeClock]
public void It_should_pass_because_clock_are_frozen()
{
var clock1 = Clock.Now;
Thread.Sleep(1000);
var clock2 = Clock.Now;
Assert.Equal(clock1, clock2);
}
[Fact]
public void Clock_time_must_be_lesser_than_a_second_different_from_now()
{
var now = DateTime.Now;
var clock = Clock.Now;
Assert.True((clock - now).Milliseconds < 1000);
}
