Во-первых, в этом коде есть ошибка. Добавьте в {} вокруг IF:
public bool CheckEngineLight(ICar car)
{
if (car.EngineLight)
{
car.GetOilChange();
return true;
}
return false;
}
Причиной сбоя является то, что вы вызываете новый Car (). CheckEngineLight ... и новый Car () вызывает GetOilChange ... carMock не вызывает GetOilChange. Измените код на car.GetOilChange()
(см. Код выше).
Тот факт, что вы передаете объект Car в метод объекта Car, очень запутан. Почему бы не изменить код на это:
public class Car : ICar
{
public bool EngineLight { get; set; }
public void GetOilChange()
{
}
public bool CheckEngineLight()
{
if (EngineLight)
{
GetOilChange();
return true;
}
return false;
}
}
Измените свой тест на:
[Test]
public void WhenEngineLightIsOnGetOilChange()
{
var carMock = MockRepository.GenerateMock<ICar>();
carMock.Stub(x => x.EngineLight).Return(true);
Assert.AreEqual(true, carMock.CheckEngineLight());
carMock.AssertWasCalled(x => x.GetOilChange());
}
}