VS单元测试回调操作未执行

时间:2015-12-18 17:58:05

标签: c# unit-testing nunit

我有以下模拟对象,我正在嘲笑IDataReader的阅读电话如下:

var read = true;
Mock<IDataReader> dataReader = new Mock<IDataReader>();
dataReader.Setup(rd => rd.Read()).Returns(read).Callback(() => 
    {
        read = false;
    });

现在我在下面的代码中使用上面的对象:

while (iDataReader.Read())
{
    // ...
}

这里的问题是,它进入无限循环。但是当我在回调中设置read = false时,IDataReader.Read()应该仅在第一次返回true而之后返回false,但它始终返回true。

1 个答案:

答案 0 :(得分:0)

当您调用Returns时,它会在您调用它时使用变量的值。因此Read将始终返回true,无论您之后对read变量做了什么。

您要做的是设置一个序列,Moq对此有所支持:

dataReader.SetupSequence(rd => rd.Read()).Returns(true).Returns(false);