Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试实体框架将连接字符串设置为bin目录,而不是App_数据_C#_Asp.net Mvc_Entity Framework_Unit Testing_Connection String - Fatal编程技术网

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

C# 单元测试实体框架将连接字符串设置为bin目录,而不是App_数据,c#,asp.net-mvc,entity-framework,unit-testing,connection-string,C#,Asp.net Mvc,Entity Framework,Unit Testing,Connection String,我正在尝试使用实体框架运行单元测试 使用debug或release运行时,我将连接字符串设置为: #if RELEASE public DataContext() : base("Release") { } #else public DataContext() : base("Debug") { } #endif Web.Config中的连接字符串如下

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

使用debug或release运行时,我将连接字符串设置为:

#if RELEASE
        public DataContext()
            : base("Release")
        {
        }
#else
        public DataContext()
            : base("Debug")
        {
        }
#endif
Web.Config中的连接字符串如下所示:

 <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>

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

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

AppDomain.CurrentDomain.SetData("DataDirectory", appDataDir);

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

您运行的是什么单元测试?丢失的信息。无论如何,单元测试中不应该涉及连接字符串,您必须模拟您的repository可能这会有所帮助:我的单元测试调用一个管理器类,该类创建DataContext实例并执行简单的查找。为什么不涉及连接字符串?它正在调用构造函数。还有,“模拟你的存储库”是什么意思?@abc单元测试涉及没有依赖关系的独立代码,因此你的测试不应该依赖于设备、文件系统或数据库可用性,这是一种错误的单元测试方法!这真是太棒了!谢谢这真是一个麻烦。我实际上要把这篇文章编辑一下,让它成为最后的作品,这是基于你的答案。
var appDataDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../App_Data");

AppDomain.CurrentDomain.SetData("DataDirectory", appDataDir);