У меня есть класс TimeMachine
, который предоставляет мне текущие значения даты/времени. Класс выглядит следующим образом:
public class TimeMachine
{
public virtual DateTime GetCurrentDateTime(){ return DateTime.Now; };
public virtual DateTime GetCurrentDate(){ return GetCurrentDateTime().Date; };
public virtual TimeSpan GetCurrentTime(){ return GetCurrentDateTime().TimeOfDay; };
}
Я хотел бы использовать TimeMachine
stub в своих тестах таким образом, чтобы я просто заглушил метод GetCurrentDateTime
, а другие 2 метода использовали обрезанный метод GetCurrentDateTime
, так как у меня нет чтобы заглушить все три метода. Я попытался написать тест следующим образом:
var time = MockRepository.GenerateStub<TimeMachine>();
time.Stub(x => x.GetCurrentDateTime())
.Return(new DateTime(2009, 11, 25, 12, 0, 0));
Assert.AreEqual(new DateTime(2009, 11, 25), time.GetCurrentDate());
Но тест терпит неудачу. GetCurrentDate
возвращает default(DateTime)
вместо использования GetCurrentDateTime
заглушки внутри.
Есть ли какой-нибудь подход, который я мог бы использовать для достижения такого поведения, или это просто базовая концептуальная функция RhinoMocks, которую я сейчас не поймаю? Я знаю, что могу просто избавиться от этих двух методов GetDate
/Time
и включить использование .Date
/.TimeOfDay
, но я хотел бы понять, возможно ли это вообще.