Moq und SqlConnection?
Schreibe ich unit-tests für unsere Produkte und verwendet wurden Moq erfolgreich mock-verbindungen zu Entity Framework. Allerdings habe ich über die folgende Methode:
public static productValue findValues(string productName, string dbConnectionString)
{
try
{
SqlConnection conn = new SqlConnection(dbConnectionString);
conn.Open();
//Do stuff
}
}
Welche Zugriff auf unsere Datenbank innerhalb, der Methode, durch die eine übergebene Verbindungszeichenfolge. Ist es möglich, die Einrichtung einer mock-DB mit Moq und erstellen Sie eine Verbindungszeichenfolge, die Punkte auf der verspottet DB? Ich habe versucht zu tun, etwas entlang der Linien von
var mockSqlConnnection = new Mock<SqlConnection>();
Aber ich bin mir nicht sicher, ob dies der richtige Ansatz, würde Sie verspotten die Verbindung selbst, anstatt die DB.
- Das ist nicht möglich glaube ich, als SqlConnection ist eine versiegelte Klasse und kann so nicht spotten. Könnten Sie mock IDBConnection, aber es wäre noch viel mehr zu tun: wenn Sie wollen, unit-test dieser Methode müssen Sie umgestalten, Sie ein bisschen.
- Du hast absolut Recht, SqlConnection ist eine versiegelte Klasse
- Eine der besten Möglichkeiten, um die Datenbank aus dem Weg, ist das verstecken von Daten hinter sich greifen Schnittstellen abstrahiert werden kann verspottet im business-logic-Tests.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte ein ähnliches problem.
Stellte ich eine
SqlDataContext
wrapper um die SqlConnection-Instanz, die Sie ererbt undISqlDataContext
Schnittstelle:Die Sie hinzufügen können überlastungen bis zu den ISqlDataContext, wie Sie benötigen.
Was dies bedeutet ist, dass Sie dann spotten die ISqlDataContext als erfordert die Verwendung von Moq oder ähnliches und kehren mock Werte.
Bedeutet, Sie können dann testen Sie Ihr repository oder irgendetwas anderes, das auf Sie trifft der Datenbank durch die SqlConnection-ohne Treffer der Datenbank.
Der andere Vorteil ist, dass Sie injizieren ISqlContext mit DI /IoC, wie gebraucht.
spät, aber warum nicht mit mstest:
müssen Sie fügen Sie einen Verweis auf System.Daten und fügen Sie dann ein Fake für ihn.
https://msdn.microsoft.com/en-us/library/hh549175.aspx
Besser ist es, wenn Sie die Durchführung, und Sie können ändern, Lesen Ebene, aber ...
Haben Sie einen Blick auf die Repository-Muster, im wesentlichen würden Sie verspotten die Daten in Ihrem Konsum-Klassen, anstatt sich Gedanken über die Umsetzung zu sprechen auf die Datenbank.
Im wesentlichen, Sie würden ein repository
Die dann konsumiert bei anderen Klassen:
Sind, und verwendet als:
Das vollständige Beispiel ist im link oben.
So, dann würde man einen verspottet repository in Ihre Klasse: