이 오류가 발생했습니다단위 테스트에서 데이터베이스 사용
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 domain = 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();
위대한 작품이지만 해킹처럼 보입니다. 어떻게해야합니까?
오늘이 끔찍한 혼란을 또 한번 보았고, Nerd Dinner 예제를 기반으로 프로젝트의 컨트롤러에서 데이터베이스로의 모든 직접 호출을 제거하고 리포지토리 개체로 옮겼습니다 인터페이스 (IRepository)를 구현합니다. 그런 다음 IRepository를 구현 한 가짜 리포지토리 개체를 만들었습니다. 각 컨트롤러에 생성자를 추가하여 IRepository를 전달하여 사용할 수있게했습니다. 그런 다음 기본 제어기 생성자를 변경하여 저장소를 초기화했습니다. 테스트는 더 이상 데이터베이스와의 대화가 없으므로 테스트가 더 빠르고 훨씬 덜 파괴적입니다.
이 작업을 수행 할 수있는 도구에 대해 자세히 설명해 주시겠습니까? 내가 원해! –
Rhino Mocks와 Moq가 조롱합니다. 하지만 인터페이스에 얼마나 익숙합니까? –