Kann ich einen SqlDataReader und Werte ohne wieder ein SqlDataReader-von einem anderen Objekt wie z.B. SqlCommand.ExecuteReader()

Schreibe ich unit-tests für mein data access layer. Um dies zu erreichen habe ich einen wrapper für SqlCommand (ISqlCommand), so dass ich verspotten seine Funktionalität.

ISqlCommand command = _connection.GetSqlCommand(sqlCommand);

In einer der Methoden, die ich Teste, SqlCommand-die ExecuteReader-Methode aufgerufen wird, und ich habe die Rückgabe eines SqlDataReader.

SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleRow);

In dieser Methode reader.Gelesen wird aufgerufen

if (reader.Read())
{
    someVariable = reader.GetString(1);
}

Was ich will, ist wieder ein SqlDataReader-Objekt aus der verspottet Befehl.ExecuteReader() mit einem Wert für mich zu Lesen. Kann es getan werden? Es scheint, dass SqlDataReader kann nur instanziiert werden von einem tatsächlichen SqlCommand.ExecuteReader ausgeführt wird, und die Rückkehr eines SqlDataReader-Objekts verwenden.
Komplette relevante code getestet werden.

ISqlCommand command = _connection.GetSqlCommand(sqlCommand);

using (command)
{
    SqlDataReader reader =  command.ExecuteReader(CommandBehavior.SingleRow);

    if (reader.Read())
    {
        dbVersion = reader.GetString(1);
    }
}

EDIT: klar, was ich verlange. SqlDatareader hat keinen öffentlichen Konstruktor. Soweit ich sagen kann, ich nicht schreiben kann, werden alle tests mit dieser Klasse, da ich nicht instanziieren, ohne einen legitimen Aufruf zu einer Datenbank, die SqlCommand. Auch versuchen, eine Schnittstelle zu erstellen, der eine SqlDataReaderWrapper nicht mir helfen wie das problem ist das gleiche. Ich versuche nicht, zu schreiben Integrationstest (was der tatsächlichen Anrufe an eine DB) und damit der DataReader scheint unmöglich zu testen, wie es ist. Meine Frage ist nun, gibt es irgendetwas, was ich tun kann, um Werte in einem SqlDataReader in dieser situation?

Schreibe einen Kommentar