TimTheEnchanter
TimTheEnchanter

Reputation: 3671

How to mock IDataReader.NextResult?

I have a stored procedure which returns two resultsets. I process it like this in my production code:

Rdr = Cmd.ExecuteReader();
while (Rdr.Read())
{
    // process first resultset
}
Rdr.NextResult();
while (Rdr.Read())
{
    // process second resultset
}

I'm not sure how this should be mocked (using Moq).

When testing single resultset stored procedures, my test code looks like this:

DataTableReader testDataReader = testData.CreateDataReader();  //testData is a DataTable
commandMock.Setup(m => m.ExecuteReader()).Returns(testDataReader)

How do I setup my mocks to mock the second resultset?

Upvotes: 1

Views: 449

Answers (1)

Charlieface
Charlieface

Reputation: 72268

You can put them into a DataSet and create a reader over that

var dataset = new DataSet();
dataset.Tables.Add(testData1);
dataset.Tables.Add(testData2);
var testDataReader = dataset.CreateDataReader();
commandMock.Setup(m => m.ExecuteReader()).Returns(testDataReader)

Upvotes: 3

Related Questions