我正在尝试将单元测试添加到我的MVC应用程序中。具体来说,我目前正在尝试测试Web API控制器的各个部分。
当我的测试方法试图实际加载控制器时,我收到一条错误,表明我没有定义所需的数据库连接字符串。
即使连接字符串是在我的主项目中定义的,我也知道我需要将它们添加到我的测试项目 app.config 中,我这样做了。但后来我遇到了一个新错误。
VegaModel.ssdl(2,2):错误0152:找不到具有不变名称' System.Data.SqlClient'的ADO.NET提供程序的实体框架提供程序。确保提供商已在' entityFramework'中注册。应用程序配置文件的一部分。
我没有收到此错误,但建议的修补程序似乎很简单,我将 web.config 中的<entityFramework>
部分复制到了我的测试项目&#39; s 的app.config
现在我收到了这个错误:
无法识别的配置部分entityFramework。 (C:\ Users \ Jonathan \ Documents \ Viper \ Branches \ Vega \ Vega.Tests \ bin \ Debug \ Vega.Tests.dll.config第38行)
嗯,好吧,最后两个错误似乎相互矛盾。但更重要的是,我的主程序使用实体框架但我的测试项目却没有(但无论如何)。所以我对这条路径感到困扰,似乎导致越来越多的实体框架在我的测试项目中配置。
能够从单元测试项目加载使用Entity Framework的控制器的极简主义方法是什么?
答案 0 :(得分:2)
虽然这听起来更像是集成测试而不是单元测试,但第二个错误
无法识别的配置部分entityFramework。
是因为配置文件顶部缺少以下内容。
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<!--other sections removed for brevity -->
<entityFramework>
<!-- removed for brevity -->
</entityFramework>
</configuration>
除此之外,你表示
所以我对这条似乎导致获得的道路感到困扰 在我的测试项目中配置了越来越多的Entity Framework。
一个建议是抽象出与实体框架的紧密耦合,以便可以通过模拟这些依赖关系来单独测试Controller。