单元测试实体框架将连接字符串设置为bin目录,而不是App_Data



我正在尝试使用实体框架运行单元测试。

当我使用调试或发布运行时,我将连接字符串设置为:

#if RELEASE
        public DataContext()
            : base("Release")
        {
        }
#else
        public DataContext()
            : base("Debug")
        {
        }
#endif

我在Web中的连接字符串。配置看起来像:

 <connectionStrings>
    <add name="Debug" connectionString="Data Source=(LocalDb)v11.0;AttachDbFilename=|DataDirectory|mydatabase.mdf;Initial Catalog=mydatabase;Integrated Security=True" providerName="System.Data.SqlClient" />
    <add name="Release" connectionString="MultipleActiveResultSets=true;Net=dbmssocn;Server=my.site.com;Database=mydatabase;User ID=myuser;Password=mypass;" providerName="System.Data.SqlClient" />
  </connectionStrings>

当我简单地运行我的Asp时,这非常有效。Net MVC网站。

但是,当我运行单元测试时,它会在bin目录中查找,而不是在App_Data目录中的调试数据库中使用Debug连接字符串,即使项目是在运行测试之前根据Debug配置构建的。

我得到的错误是:

系统。数据实体果心EntityException:基础提供程序在打开时失败。--->系统数据SqlClient。SqlException:无法附加文件'D:\Development\Projects\myproject\myproject\bin\mydatabase.mdf

为什么它在bin目录中查找,而不是使用连接字符串中定义的App_Data路径?

答案:

答案是在应用程序域中设置数据目录,就像在我的基本测试类中的测试夹具设置中一样

public class TestBase
{
    [TestFixtureSetUp]
    public void Setup()
    {
        var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
        var appDataDirectory = Path.Combine(baseDirectory.Replace("\bin", ""), "App_Data");
        AppDomain.CurrentDomain.SetData("DataDirectory", appDataDirectory);
    }
}

对于单元测试项目,DataDirectory不会自动设置。尝试自己手动设置:

var appDataDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../App_Data");
AppDomain.CurrentDomain.SetData("DataDirectory", appDataDir);

在初始化EF上下文之前,请确保您正在调用上面的代码。

相关内容

  • 没有找到相关文章

最新更新