я бег в эту ошибкуИспользование базы данных в блоке тесты
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..
пытаюсь написать несколько модульных тестов для тестирования контроллера. Я полагал, что проблема заключалась в том, что тесты пытались не использовать базу данных, определенную в основном проекте. Таким образом, я изменил строку подключения в тестах на
В App.config для тестового проекта Я использую
<connectionStrings>
<add name="MessagesDBConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MessagesDB.mdf;Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
, а затем перегрузили DataDirectory делая
AppDomain домен = AppDomain. CurrentDomain;
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();
Что отлично работает, но выглядит как взломанный. Как мне это сделать?
Edit:
Я еще раз посмотрел на этом ужасном беспорядке сегодня и основан от примера Nerd ужина я удалил все прямые вызовы к базе данных от контроллеров в моем проекте и переместил их в хранилище объекта который реализует интерфейс (IRepository). Затем я создал объект фальшивого репозитория, который также реализовал IRepository. Я добавил конструктор для каждого контроллера, который разрешил передавать в IRepository, который будет использоваться. Конструктор контроллера по умолчанию был изменен для инициализации репозитория. Тесты больше не говорят с базой данных, поэтому они быстрее и гораздо менее разрушительны.
Не могли бы вы рассказать о тех инструментах, которые могут это сделать? Мне хочется! –
Rhino Mocks и Moq будут насмехаться над вами. Но насколько вы знакомы с интерфейсами? –