我们使用实体框架5的Visual Studio 2012的ASP.NET MVC项目。
有迹象表明,依赖于数据库的一些单元测试。 在测试项目设置app.config文件使用一个中央SQL Server数据库正常工作。
然而,这将是好得多使用的LocalDB,让每个开发人员运行测试时都有他/她自己的数据库。 特别是因为我们希望有设立测试DropCreateDatabaseAlways
运行时。
但是,我不能让安装工作。 如果我尝试这的app.config:
<add name="TestDb"
connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=unittestdb;
Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\unittestdb.mdf"
providerName="System.Data.SqlClient" />
我得到:
System.Data.SqlClient.SqlException:发生文件激活错误。 物理文件名“\ unittestdb.mdf”可能不正确。 诊断和纠正其他错误,然后重试操作。 CREATE DATABASE失败。 列出的某些文件名不能创建。 检查相关的错误。
这听起来像它想要的MDF文件已经存在,因为它试图创建数据库,这似乎很奇怪。 手动创建一个MDF文件不改变错误消息。
尝试:
AppDomain.CurrentDomain.SetData(
"DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ""));
这将创建在/bin/Debug/yourdbname.mdf数据库文件
我会用:
// Declare this property - this is set by MSTest
public TestContext TestContext { get; set; }
// In test initialization - note the signature should be exactly this
// A static void method with one argument of type TestContext
[ClassInitialize]
public static void SetUp(TestContext context)
{
AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(context.TestDeploymentDir, string.Empty));
}
可能会导致你的问题AppDomain.CurrentDomain.BaseDirectory
,改用: context.TestDeploymentDir
请记住,对于测试项目:
AttachDBFilename=|DataDirectory|
意味着它会看着你的输出/斌/ debug文件夹中的一个单元测试在你的web /生产/任何应用反对App_Data文件夹。
你需要做两件事情1.将App_Data文件夹中的数据库文件输出到您的测试应用的根。 2.突出显示您的数据库,以便您在Visual Studio中得到你的属性窗口。 设置构建行动“内容”,所以当你运行该项目,它会被复制到输出文件夹。
瞧。
我建议使用此代码(基于的答案Jupaol ):
[ClassInitialize]
public static void SetUp(TestContext context)
{
AppDomain.CurrentDomain.SetData(
"DataDirectory",
context.TestDeploymentDir);
}
通常这将里面创建数据库TestResults\<test run>\Out\
您的解决方案的文件夹中。
我发现你的问题,同时寻找解决问题的办法。 在一个单独的项目中使用与NUnit的的EntityFramework,我不得不改变的App.config
是这样的:
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework> </configuration>
文章来源: How to set up LocalDb for unit tests in Visual Studio 2012 and Entity Framework 5