Automatisiertes Testen ist im Grunde immer eine sinnvolle Unterfangen :)
Ihr erster Schritt in der Lage sein, dies zu testen Ihre Rückkehr Logik Datenzugriff zu haben ist ein IDataReader
statt SqlDataReader
- SqlDataReader
implementiert IDataReader
, also keine Probleme dort.
In Ihren Unit-Tests können Sie dann manuell erstellen und DataTable
Objekte bevölkern, und dataTable.CreateDataReader()
rufen eine IDataReader
zu bekommen in das Objekt unter Test zu bestehen.
bearbeiten
Um Ihre Tests mit einer Reihe von Beispieldaten zur Verfügung stellen, würde ich vorschlagen, ein ObjectMother für jede Datentabelle Sie verwenden, in einem speziellen Ort Erstellung der Datentabellen zu halten. Sie können dann Methoden auf jede Klasse ObjectMethod
setzen, um bestimmte Daten in einer stark typisierten Weise zu aktualisieren. Zum Beispiel:
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();
}
}
... die Sie dann wie folgt verwenden könnte einen Datenleser erhalten:
IDataReader customerDetailsReader = new PersonalDetailsBuilder()
.CreateNewTable()
.AddStandardData()
.AddRow(17, "Customer 17")
.ToDataReader();
Stellen Sie sich vor, dass einer unserer IDataReader Objekte zurückgibt Informationen über einen Kunden: RS1 = persönlichen Daten; rs2 = Berechtigungen; rs3 - xxx usw. Die meisten Tests verwenden dies als Standarddatensatz. Einige Tests möchten möglicherweise die meisten dieser Werte verwenden, überschreiben jedoch einige der Eigenschaften in den Datentabellen. Wie einfach ist das? Fast wie Vererbung .... – DrGriff
Ich bin nicht sicher, dass ich verstehe - meinst du einen einzelnen Datenleser für mehrere Ergebnissätze oder eine Reihe von Datenlesegeräten? Auf jeden Fall habe ich meine Antwort aktualisiert. –
Warum der Downvote? Jemand...? –