c# - 为什么以下测试使用 Mbunit 和 Rhino 模拟失败?

标签 c# unit-testing rhino-mocks mbunit

我正在玩弄 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/

相关文章:

javascript - 如何从单独的 javascript 文件访问模型属性? (MVC)

c# - 删除除空格外的所有非数字字符

node.js - 如何在 NodeJS 中模拟流

c# - 用于评估可测试性的 C# 代码解析器?

c# - 我如何测试 Relaycommand?

c# - 如何使用 Moq 创建 stub

c# - 回发后动态创建的控件丢失数据

c# - 在 C# 中执行任何其他操作时表单无响应

java - 关于使用断言删除生产中 Java 代码部分的建议

c# - 使用 Rhino 从模拟对象引发事件