-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Creating unit tests where time is involved can be tricky, if not impossible. The reason for this is that the time is always different when you run your unit test. You should see getting the current time as accessing a external system and as with any other external system (web service, database, etc), you should not depend on it directly. You should depend on a interface, so you can use different implementations for unit testing, development and production. To help I've created the TimeServices library.
TimeServices provides a way to access the current time but it makes it possible to switch implementation. It has been created with Dependency Injection in mind, so you can use it with you favorite container or use poor mans dependency injection. The library provides a basic interface, IClock, which provides a few ways to get the current time. It also provides a few basic implementations:
- SystemClock: Get the time from the system (production)
- FixedClock: Get the time from the values provided (unit tests)
- ServiceClock: Get the time from a remote source
I've also included some experimental/useless wrapped implementations, which probably never will/should be used:
- CompensatingClock: Compensate for clocks with lag
- OffsetClock: Subtract a provided amount of the wrapped clock
- Add documentation for the clock implementations
- Add examples to use the clock with dependency injection
- Create a host implementation for the IClockService