I'm writing a Unit Test class in C# (.NET 4.5). In one of the tests I'm checking the values of various properties after an instance of our class FeedbackDao
is constructed. On construction, the FeedbackDate
property of FeedbackDao
is set to DateTime.Now
.
FeedbackDao feedbackDao = new FeedbackDao();
// a couple of lines go here then I set up this test:
Assert.IsTrue(feedbackDao.FeedbackDate.CompareTo(DateTime.Now) < 0);
My assumption is that feedbackDao.FeedbackDate should always be just a little earlier than the current time returned by DateTime.Now
, even if it's only by a millisecond, and my IsTrue
test should always pass, but sometimes it passes and sometimes it fails. When I add a message like this:
Assert.IsTrue(feedbackDao.FeedbackDate.CompareTo(DateTime.Now) < 0,
feedbackDao.FeedbackDate.CompareTo(DateTime.Now).ToString());
the message sometimes reads -1 (meaning that FeedbackDate
is earlier than Now
) and sometimes reads 0 (meaning that the DateTime instances are equal).
Why is FeedbackDate
not always earlier than Now
? And, if I can't trust that comparison, how can I write a rigorous test to check the value of FeedbackDate
when FeedbackDao
is constructed?