public void Meters_Are_Checked_In_Desired_Time() { //Sets current time to 2016/05/05 21:34:00 SystemTime.SetNow(new DateTime(2016, 5, 5, 21, 34, 00)); var meterLoader = new Mock <IAmActiveMetersLoader>(); var sut = new SystemTimeDependendProductionCode(meterLoader.Object); sut.DoPeriodicCheckIfNeeded(); //System check should occur after 22:00, so at 21:34 there should //be no invocations of ReloadAllActiveMeters meterLoader.Verify(x => x.ReloadAllActiveMeters(), Times.Exactly(0)); //We're moving time forward, to the threshold hour: 22:00 SystemTime.SetNow(new DateTime(2016, 5, 5, 22, 00, 00)); sut.DoPeriodicCheckIfNeeded(); //Still, no invocation should occur meterLoader.Verify(x => x.ReloadAllActiveMeters(), Times.Exactly(0)); //Minute after 22:00 SystemTime.SetNow(new DateTime(2016, 5, 5, 22, 01, 00)); sut.DoPeriodicCheckIfNeeded(); //Method should be called meterLoader.Verify(x => x.ReloadAllActiveMeters(), Times.Exactly(1)); //Clean up in order to conduct other tests SystemTime.ResetNow(); }