【发布时间】:2010-09-09 15:34:24
【问题描述】:
我正在玩 MbUnit 和 Rhino Mocks 并做了一个简单的测试。它可能是设计不佳的代码,但我更专注于看看我是否能让测试通过。基本上,当汽车的发动机灯亮起时,汽车应该换油。这是代码:
public interface ICar
{
bool EngineLight { get; set; }
void GetOilChange();
bool CheckEngineLight(ICar car);
}
public class Car : ICar
{
public bool EngineLight { get; set; }
public void GetOilChange()
{
}
public bool CheckEngineLight(ICar car)
{
if (car.EngineLight)
GetOilChange();
return true;
return false;
}
}
[TestFixture]
public class CarTests
{
[Test]
public void WhenEngineLightIsOnGetOilChange()
{
var carMock = MockRepository.GenerateMock<ICar>();
carMock.Stub(x => x.EngineLight).Return(true);
Assert.AreEqual(true, new Car().CheckEngineLight(carMock)); //This passes
carMock.AssertWasCalled(x => x.GetOilChange()); //This fails
}
}
【问题讨论】:
-
我认为这与您的测试无关,但您的 CheckEngineLight() 代码中存在错误。 if 语句中的两行应该有 {}。
-
我想我是故意遗漏的,因为如果 EngineLight 开启,我希望它调用 GetOilChange,它什么都不做,然后返回 true,但你是对的。在这种情况下,我知道它会返回 true,所以我故意将其省略。
-
您在询问错误的对象是否调用了 GetOilChange 方法。 GetOilChange 方法是在您正在创建的 Car 对象上调用的,而不是在 mock 上。
标签: c# unit-testing rhino-mocks mbunit