Is there a nuget package, or other "standard" that wraps the hard dependency created when your code is coupled to DateTime.Now
?
I'm seeking guidance on this before writing my own. Albeit that it's trivial to do so, I'd rather use something that exists if it already does as somewhat of a standard.
I very much doubt that there's any nuget package for anything quite so trivial - a single interface and probably two implementations ("system" clock and a fake one for testing).
If you're doing one of these yourself, I would strongly consider making the clock return a DateTimeOffset
instead of a DateTime
, or at least make it wrap DateTime.UtcNow
... DateTime.Now
is a problem waiting to happen...
However, Noda Time contains all of this out of the box. You probably don't want the whole of Noda Time just for this reason, mind you...
(There's a Noda Time nuget package, but it's definitely pre-release. I need to update it to a 0.2 version at some point, but it's still not at the v1 level yet. Getting there though...)
If you want a really cheap-and-cheerful way of expressing the dependency, you could always take a Func<DateTime>
or Func<DateTimeOffset>
wherever you normally express dependencies. The interface approach is cleaner though :)
I dont know of any nuget package that does this. When I've run into this problem I've simply created my own type like this:
public static class SystemTime
{
public static Func<DateTime> Now = () => DateTime.Now;
}
That way in your unit tests you can easily change the functionality of Now to return any DateTime you want.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With