2015-12-18 79 views
0

我在下面嘲笑的对象,我下面嘲弄了的IDataReader的读取调用回调动作:VS单元测试不执行

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

当您调用Returns时,它会在调用它时使用该变量的值。所以Read将永远返回true,无论你以后对read变量做什么。

什么你希望做的是建立一个序列,并起订量支持这个功能:

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