2015-12-18 109 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);