Ответ 1
Автоматическое тестирование в основном всегда является разумным делом:)
Ваш первый шаг, чтобы проверить это, чтобы ваша логика доступа к данным возвращала IDataReader
вместо SqlDataReader
- SqlDataReader
реализует IDataReader
, поэтому проблем нет.
В ваших модульных тестах вы можете вручную создавать и заполнять объекты DataTable
и вызывать dataTable.CreateDataReader()
, чтобы передать IDataReader
в тестируемый объект.
Edit
Чтобы предоставить ваши тесты набора данных образца, я бы предложил использовать ObjectMother для каждой используемой таблицы данных, сохраняя создание таблиц данных в одном выделенном месте. Затем вы можете поместить методы в каждый класс ObjectMethod
для обновления определенных данных строго типизированным способом. Например:
public class PersonalDetailsBuilder
{
private DataTable _dataTable;
public PersonalDetailsBuilder CreateNewTable()
{
this._dataTable = new DataTable("CustomerPersonalDetails")
{
Columns = new[]
{
new DataColumn("CustomerId", typeof(int)),
new DataColumn("CustomerName", typeof(string))
}
};
return this;
}
public PersonalDetailsBuilder AddStandardData(int numberOfRows = 3)
{
foreach (int i in Enumerable.Range(1, numberOfRows + 1))
{
this.AddRow(i, "Customer " + i);
}
return this;
}
public PersonalDetailsBuilder AddRow(int customerId, string customerName)
{
this._dataTable.Rows.Add(customerId, customerName);
return this;
}
public IDataReader ToDataReader()
{
return this._dataTable.CreateDataReader();
}
}
... который вы могли бы использовать таким образом, чтобы получить считыватель данных:
IDataReader customerDetailsReader = new PersonalDetailsBuilder()
.CreateNewTable()
.AddStandardData()
.AddRow(17, "Customer 17")
.ToDataReader();