Automatyczne testowanie jest w zasadzie zawsze rozsądne starania :)
Twój pierwszy krok, aby móc przetestować to jest mieć swój powrót logiki dostępu do danych IDataReader
zamiast z SqlDataReader
- SqlDataReader
implementuje , więc nie ma problemów.
W swoich testach jednostkowych można następnie ręcznie budować i wypełniać obiekty DataTable
i wywoływać dataTable.CreateDataReader()
, aby uzyskać IDataReader
przejść do badanego obiektu.
Edit
podać swoje testy z zestawem przykładowych danych, polecam stosując ObjectMother dla każdej tabeli danych użyć, utrzymując tworzenie tabel danych w jednym dedykowanym miejscu. Następnie możesz umieścić metody na każdej klasie ObjectMethod
, aby zaktualizować określone dane w sposób mocno napisany. Na przykład:
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();
}
}
... które można następnie wykorzystać tak, aby czytnik danych:
IDataReader customerDetailsReader = new PersonalDetailsBuilder()
.CreateNewTable()
.AddStandardData()
.AddRow(17, "Customer 17")
.ToDataReader();
wyobrazić, że jeden z naszych obiektów IDataReader zwraca szczegółów dotyczących klientów: RS1 = dane osobowe; rs2 = uprawnienia; rs3 - xxx itd. Większość testów użyje tego jako domyślnego zestawu danych. Niektóre testy mogą chcieć wykorzystać większość tych wartości, ale zastąpić niektóre właściwości w datatables. Jak łatwo to zrobić? Prawie jak dziedziczenie ... – DrGriff
Nie jestem pewien, czy rozumiem - masz na myśli jeden czytnik danych dla wielu zestawów wyników lub zestaw czytników danych? W każdym razie zaktualizowałem swoją odpowiedź. –
Dlaczego upadek? Ktoś...? –