.net 在单元测试中使用数据库

.net 在单元测试中使用数据库,.net,asp.net-mvc,datadirectory,.net,Asp.net Mvc,Datadirectory,我遇到了这个错误 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.. 这很管用,但看起来像个黑客。我该怎么做呢 编辑: 今天我又看了一眼这个糟糕

我遇到了这个错误

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..  
这很管用,但看起来像个黑客。我该怎么做呢

编辑:


今天我又看了一眼这个糟糕的烂摊子,根据Nerd晚餐的例子,我删除了项目中控制器对数据库的所有直接调用,并将它们移动到一个实现接口(IRepository)的存储库对象中。然后我创建了一个伪存储库对象,它也实现了IRepository。我向每个控制器添加了一个构造函数,它允许传入一个要使用的IRepository。然后将默认控制器构造函数更改为初始化存储库。测试不再与数据库通信,因此测试速度更快,破坏性更小

标准方法是模拟数据库。这意味着您正在测试的类接受一个提供数据的参数,看起来像一个数据库连接

在单元测试中,您实际上传入了一个提供硬编码数据的实现


有一些工具可以帮助您实现这一点,例如,通过将数据库查询的结果保存到配置文件中,这样您就可以使用真实数据设置测试,但它将快速加载,并且永远不会更改,因为它现在保存在与数据库分离的文件中。有一种工具可供您使用。

您能详细介绍一下可用于此目的的工具吗?我想要!Rhino Mocks和Moq将为您进行模拟。但是,您对界面的熟悉程度如何?
<connectionStrings>
    <add name="MessagesDBConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MessagesDB.mdf;Integrated Security=True;User Instance=True"
      providerName="System.Data.SqlClient" />
</connectionStrings>
        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();