NUnit Assert.AreEqual DateTime Tolerances
Use Assert.That and Is.Equal constraint instead of Assert.AreEqual. Below is a code sample from the Nunit website itself
DateTime now = DateTime.Now;
DateTime later = now + TimeSpan.FromHours(1.0);
Assert.That(now, Is.EqualTo(now) );
Assert.That(later, Is.EqualTo(now).Within(TimeSpan.FromHours(3.0)));
Assert.That(later, Is.EqualTo(now).Within(3).Hours);
You can check tolerances with something like:
Debug.Assert((date1 - date2) < TimeSpan.FromSeconds(1));
If you are unsure which date is newer, use
Debug.Assert(Math.Abs((date1 - date2).TotalSeconds) < 1)
NUnit has also added built in support for this using the Within
keyword
DateTime now = DateTime.Now;
DateTime later = now + TimeSpan.FromHours(1.0);
Assert.That(later, Is.EqualTo(now).Within(TimeSpan.FromHours(3.0)));
Assert.That(later, Is.EqualTo(now).Within(3).Hours);
To correctly check if any 2 arbitrary dates are equals to within a 1 second tolerance, the following is a correct solution:
Debug.Assert(Math.Abs((date1 - date2).TotalSeconds) < 1)
I figured I'd add this as a solution since the accepted solution was incorrect when date2
is larger than date1
by more than a second, and the solution has not been updated following my comment to @SwDevMan81.