, , RTM unit.
:
public interface ISystemClock
{
DateTime Now { get; }
}
, , , , ISystemClock. ISystemClock, :
public class FakeSystemClock : ISystemClock
{
public DateTime Now { get; set; }
}
:
[TestMethod]
[ExpectedException(typeof(InvalidOperationException),
"Service should throw an exception when called on saturday.")]
public void DoSomething_WhenCalledOnSaturday_ThrowsException()
{
var saturday = new DateTime(2011, 1, 1);
Assert.AreEqual(saturday.DayOfWeek, DayOfWeek.Saturday,
"Test setup fail");
var clock = new FakeSystemClock() { Now = saturday };
var service = new Service(clock);
service.DoSomething();
}
ISystemClock, . ISystemClock, :
public class RealSystemClock : ISystemClock
{
public DateTime Now
{
get { return DateTime.Now; }
}
}
DI, RealSystemClock, ISystemClock.
. Func<DateTime>, , . , DI , Func<DateTime>, , " ".
, .