2009-10-08 117 views
2

我有一个asp.net mvc应用程序,它使用默认的用户数据库。这一切都很好,但我想为它创建一些测试。我有一个测试项目,我马上偶然发现了一个异常数据库连接测试失败

The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid. 

但连接字符串可以正常使用(至少在MVC项目的web.config)。我的实体DB访问逻辑构造函数抛出异常

public ASPNETDBEntities() : 
      base("name=ASPNETDBEntities", "ASPNETDBEntities") 
{ 
    this.OnContextCreated(); 
} 

任何想法? 在此先感谢。

回答

2

问题是,在运行单元测试时,您需要在测试项目的App.config文件中设置连接字符串,以便Entity Framework找到它。但是,如果你在做单元测试,你很可能根本不想访问数据库,而是模拟一些虚拟对象来测试。 (如果你的代码很难做到这一点,你可能需要对代码进行一些重构...)

第三种可能的情况是,你正在做集成测试,并因此想访问a真正的分贝时测试 - 但是,它不一定是真实分贝。它可以是具有相同数据库模式的任何数据库。我建议设置一个虚拟数据库,其中包含一些虚拟记录,您可以针对这些数据执行测试(以及您将测试项目中的连接字符串放在App.config文件中),这些数据不会增长, “真正的”分贝。

+0

如果是第二段中的场景,上下文实际上被嘲弄,但是您想要利用模拟对象中的基础对象上下文的属性,该怎么办?你可以在app.config中放置一个模拟连接字符串吗? – devlord 2013-10-17 00:09:21

+0

@lorddev:我不太清楚你想描述什么样的场景,但是如果你不能发送一个“普通”的模拟对象,配置为当你与它交互时返回你期望的任何对象,那么你可能还没有实现你的图层的清晰分离 - 换句话说,你应该考虑重构你的代码,以便更容易测试。 – 2013-10-20 19:35:46

+0

我希望能够在断开的上下文模拟中访问ObjectStateManager。发现它是内置于EF中的,并且取决于实际的ObjectContext,如果没有有效的EF连接字符串,则无法创建该ObjectContext。 – devlord 2013-10-21 19:25:58