我正在玩弄 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
}
}
最佳答案
在这个方法中:
public bool CheckEngineLight(ICar car)
{
if (car.EngineLight)
GetOilChange();
return true;
return false;
}
您正在调用 GetOilChange();在您正在测试的对象上,而不是在您作为参数传递的模拟上。因此,这个方法确实没有在模拟中调用。我猜你想要这个:
public bool CheckEngineLight(ICar car)
{
if (car.EngineLight)
{
car.GetOilChange();
return true;
}
return false;
}
关于c# - 为什么以下测试使用 Mbunit 和 Rhino 模拟失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3678088/