我有以下模拟对象,我正在嘲笑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。
答案 0 :(得分:0)
当您调用Returns
时,它会在您调用它时使用变量的值。因此Read
将始终返回true
,无论您之后对read
变量做了什么。
您要做的是设置一个序列,Moq对此有所支持:
dataReader.SetupSequence(rd => rd.Read()).Returns(true).Returns(false);