【发布时间】:2011-02-08 06:59:04
【问题描述】:
我是最小起订量和设置模拟的新手,所以我可以在一些帮助下完成。如何使用 Moq 模拟 SqlDataReader?
更新
经过进一步测试,这是我目前所拥有的:
private IDataReader MockIDataReader()
{
var moq = new Mock<IDataReader>();
moq.Setup( x => x.Read() ).Returns( true );
moq.Setup( x => x.Read() ).Returns( false );
moq.SetupGet<object>( x => x["Char"] ).Returns( 'C' );
return moq.Object;
}
private class TestData
{
public char ValidChar { get; set; }
}
private TestData GetTestData()
{
var testData = new TestData();
using ( var reader = MockIDataReader() )
{
while ( reader.Read() )
{
testData = new TestData
{
ValidChar = reader.GetChar( "Char" ).Value
};
}
}
return testData;
}
当我在 GetTestData() 方法中执行 reader.Read 时,您遇到的问题始终是空的。我需要知道如何做类似的事情
reader.Stub( x => x.Read() ).Repeat.Once().Return( true )
【问题讨论】:
-
我没有模拟 SqlDataReader 的经验,但如果可以的话,你应该模拟接口。我已经为您查找了它,也许这篇文章可以帮助您:] stackoverflow.com/questions/1792984/… 它使用 Rhinomocks 但想法是一样的。建议在那里,你应该模拟 IDataReader。当您模拟了它时,在模拟上执行 .Setups() 应该不会有问题 ^^ 如果您已经尝试模拟界面,也许您可以通过发布一些示例代码向我们展示您卡在哪里:]
标签: c# unit-testing mocking moq