tags:

views:

43

answers:

2

Hey everyone,

I'm wondering if anybody's found a good solution to this:

In our unit tests; we commonly use Assert.AreEqual() to validate our results. All is well and good; until we start trying to use this on DateTime properties.

Although the times are very similar, sometimes they are off by milliseconds, which causes the tests to fail. In our application; as long as they're accurate to the second; that's good enough for us.

Has anybody found a good way to somehow implement tolerances in this case? Typically our workaround is to split it into 2 separate statements; one which checks the .ToShortDateString(), and another that checks .ToShortTimeString(), but this looks sloppy in my opinion.

+5  A: 

You can check tolerances with something like:

Debug.Assert((date1 - date2) < TimeSpan.FromSeconds(1));
SwDevMan81
Very nice. Never thought to implement it this way
Jim B
But don't you really mean `<`?
Dan Tao
@Dan Tao - Yeah, had my assert thinking was backward, yeah if u want it to error, then it should <
SwDevMan81
This will fail if date2 is larger than date1 by more than a second. Should check the absolute value of the total seconds of the difference. e.g. `Debug.Assert(Math.Abs((date1 - date2).TotalSeconds) < 1)`
Nathan Ernst
+1  A: 

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.

Nathan Ernst