Код ниже я собрал вместе, чтобы имитировать интерфейс времени, который вы можете использовать для своих модульных тестов. используя это, вы можете установить свое время либо на реальное время, либо на фальшивое время, которое вы укажете. Я часто использую этот метод при модульном тестировании. Это называется внедрением зависимостей или внедрением конструктора, которое очень полезно для модульного тестирования.
class Hotel
{
public DateTime ClosingTime = DateTime.ParseExact("17:00:00", "HH:ii:ss", CultureInfo.InvariantCulture);
public IStubClock Clock;
public bool IsOpen
{
get
{
return Clock.Now.TimeOfDay <= ClosingTime.TimeOfDay;
}
}
public Hotel(IStubClock clock)
{
Clock = clock;
}
}
Используя этот интерфейс, вы можете издеваться над любой структурой DateTime.Now.
public interface IStubClock
{
DateTime Now { get; }
}
Поддельный вариант
public class FakeClock : IStubClock
{
private DateTime _now;
public DateTime Now
{
get
{
return _now;
}
}
public FakeClock(DateTime now)
{
_now = now;
}
}
И реальный вариант
public class RealClock : IStubClock
{
public DateTime Now
{
get
{
return DateTime.Now;
}
}
}
а затем вы можете использовать их в своих тестах, делая что-то вроде этого
class Program
{
static void Main(string[] args)
{
IStubClock fakeClock = new FakeClock(new DateTime(1, 1, 1, 10, 0, 0)); //time is set to 10am
IStubClock realClock = new RealClock(); //time is set to whatever the time now is.
Hotel hotel1 = new Hotel(fakeClock); //using fake time
Hotel hotel2 = new Hotel(realClock); //using the real time
}
}
person
Dan Scott
schedule
26.07.2018
TimeOfDay
изDateTime
или вы ежедневно обновляете время закрытия? - person Marco Forberg   schedule 26.07.2018