这个问题其实比较简单,只要实现一个接口,让它返回现在的时间就可以了。比如用类似下面的代码:
/// <summary>
/// This interface is to provide current time so that we can setup current date time in unit test based on our purpose.
/// </summary>
public interface IDateTimeProvider
{
/// <summary>
/// Get current date time.
/// </summary>
DateTime Now { get; }
}
在代码中,你可以用下面的类:
/// <summary>
/// Implemenation of IDateTimeProvider.
/// </summary>
public class DateTimeProvider : IDateTimeProvider
{
/// <summary>
/// Return the current date time.
/// </summary>
public DateTime Now => DateTime.Now;
}
但是在单元测试中,你应该用Mock来指定你需要的时间:
[TestMethod]
public void MyTimeSpan_should_return_the_time_after_created()
{
var datetimeMock = new Mock<IDateTimeProvider>();
var now = DateTime.Now;
datetimeMock.Setup(o => o.Now).Returns(now);
var myTimeSpan = new MyTimeSpan(datetimeMock.Object)
datetimeMock.Setup(o => o.Now).Returns(now.AddSeconds(70));
int timePassed = myTimeSpan.TimePassed()
Assert.AreEqual(70, timepassed);
}