【发布时间】:2015-03-11 20:18:30
【问题描述】:
我尝试测试我的实体类,但总是失败:
System.Data.MetadataException:
无法加载指定的元数据资源。
我认为问题在于连接字符串和App.config。我尝试了很多东西:添加一些东西来构建事件,更改配置名称,将配置文件复制到解决方案文件夹,项目文件夹,project_folder/bin/debug,再次更改很多名称......但它仍然不起作用.
我有一个包含 3 个项目的“AppProject”解决方案:
- “实体”
- “网络测试”
- “MVCApp”
Entity 项目有一个 .edmx 文件和简单的 POCO 类。当我将Entity/App.config 的连接字符串添加到MVCApp/Web.config 时,“MVCApp”和数据库工作正常。
当我将 Entity/App.config 复制到 WebTest/App.config 时,它不起作用。不知道问题出在哪里。
我使用 Visual NUnit,但是当我尝试在 NUnit 中打开时仍然无法正常工作。
我的App.config:
<connectionStrings>
<add name="UserDB"
connectionString="metadata=res://*/Model.Entity.csdl|
res://*/Model.Entity.ssdl|
res://*/Model.Entity.msl;
provider=System.Data.SqlClient;
provider connection string=
"Data Source=.\SQLExpress;
Initial Catalog=TestDB;
Integrated Security=True;
MultipleActiveResultSets=True""
providerName="System.Data.EntityClient" />
<!-- NOTE: line breaks in the above connection string have been inserted only
for better legibility. -->
</connectionStrings>
【问题讨论】:
-
如果您使用的是数据库资源,那么您实际上不是在创建单元测试,而是在创建集成测试。您应该为单元测试模拟数据库连接。
-
噢,谢谢您的回答。以前,当我测试数据库时,我总是启动事务,在数据库上做一些事情,检查结果并回滚事务。
-
WebTest项目中是否引用Entity项目?
-
当然,我在 WebTest 项目中使用实体项目中的 poco 类:)
-
单元测试的目的是测试你的代码,而不是你的代码使用的数据框架。这就是为什么您需要模拟数据库连接,以便您可以伪造(和测试)任何连接问题。在单元测试中使用真实的数据库连接是不好的做法。
标签: c# database entity-framework tdd nunit