You were on the right track with your bullying, but dataReaderMock.Setup(x => x.Read()).Returns(() => records);this is where you were wrong, because it .Readreturns bool, not the records themselves, which are read using IDataReaderyour method.
:
var dataReader = new Mock<IDataReader>();
dataReader.Setup(m => m.FieldCount).Returns(2);
dataReader.Setup(m => m.GetName(0)).Returns("First");
dataReader.Setup(m => m.GetName(1)).Returns("Second");
dataReader.Setup(m => m.GetFieldType(0)).Returns(typeof(string));
dataReader.Setup(m => m.GetFieldType(1)).Returns(typeof(string));
, , .. , , , GetName GetFieldType .
.Read(), SetupSequence:
dataReader.SetupSequence(m => m.Read())
.Returns(true)
.Returns(true)
.Returns(false);
, :
private const string Column1 = "First";
private const string Column2 = "Second";
private const string ExpectedValue1 = "Value1";
private const string ExpectedValue2 = "Value1";
private static Mock<IDataReader> CreateDataReader()
{
var dataReader = new Mock<IDataReader>();
dataReader.Setup(m => m.FieldCount).Returns(2);
dataReader.Setup(m => m.GetName(0)).Returns(Column1);
dataReader.Setup(m => m.GetName(1)).Returns(Column2);
dataReader.Setup(m => m.GetFieldType(0)).Returns(typeof(string));
dataReader.Setup(m => m.GetFieldType(1)).Returns(typeof(string));
dataReader.Setup(m => m.GetOrdinal("First")).Returns(0);
dataReader.Setup(m => m.GetValue(0)).Returns(ExpectedValue1);
dataReader.Setup(m => m.GetValue(1)).Returns(ExpectedValue2);
dataReader.SetupSequence(m => m.Read())
.Returns(true)
.Returns(true)
.Returns(false);
return dataReader;
}
( Setup, - dataReader , )
. :
[Test]
public void ResovleDataReader_RowCount()
{
var dataReader = CreateDateReader();
var view = ResolveDataReader(dataReader.Object);
Assert.AreEqual(2, view.Count);
}
[Test]
public void ResolveDataReader_NamesColumn1()
{
var dataReader = CreateDataReader();
var view = ResolveDataReader(dataReader.Object);
Assert.AreEqual(Column1, view.Table.Columns[0].ColumnName);
}
[Test]
public void ResolveDataReader_PopulatesColumn1()
{
var dataReader = CreateDataReader();
var view = ResolveDataReader(dataReader.Object);
Assert.AreEqual(ExpectedValue1, view.Table.Rows[0][0]);
}
( NUnit, assert )
, , , ResolveDataReader internal InternalsVisibleTo, , , , .