Ich war in diesen Fehler läuftVerwenden von Datenbank-in Komponententests
An attempt to attach an auto-named database for file C:\<...>\Out\MessagesDB.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share..
Versuch zum Testen eines Controler einige Unit-Tests zu schreiben. Ich glaubte das Problem war, dass die Tests versuchten, die Datenbank, die ich im Hauptprojekt definiert hatte, nicht zu verwenden. So modifizierte ich die Verbindungszeichenfolge in den Tests zu
Im App.config für das Testprojekt I
bin mit<connectionStrings>
<add name="MessagesDBConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MessagesDB.mdf;Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
und overrode dann das Datenverzeichnis von
AppDomain domain = AppDomain tun. AktuelleDomäne;
String currentDirectory = System.Environment.CurrentDirectory;
String DataDirectory = currentDirectory.Substring(0, currentDirectory.IndexOf("TestResults")) + "Server\\App_Data";
domain.SetData("DataDirectory", DataDirectory);
db = new Server.Models.MessagesDBDataContext();
die großen Werke, sondern sieht aus wie ein Hack. Wie soll ich das gemacht haben?
Edit:
ich heute an diesem schrecklichen Chaos noch einen Blick nahm und auf Basis der I des Nerds Abendessen Beispiel alle direkten Anrufe auf die Datenbank von den Controllern in meinem Projekt entfernt und bewegt sie in ein Repository-Objekt welche implementiert eine Schnittstelle (IRepository). Dann habe ich ein falsches Repository-Objekt erstellt, das auch IRepository implementiert hat. Ich fügte jedem Controller einen Konstruktor hinzu, der die Verwendung eines IRepository erlaubte. Der Standardcontrollerkonstruktor wurde dann geändert, um ein Repository zu initialisieren. Die Tests sprechen nicht mehr mit der Datenbank, daher sind sie schneller und weniger zerstörerisch.
Können Sie näher auf die Arten von Werkzeugen eingehen, die das tun können? Ich will! –
Rhino Mocks und Moq werden das Spott für dich tun. Aber wie vertraut sind Sie mit Schnittstellen? –