为控制器单元测试配置实体框架

时间:2017-02-28 20:52:19

标签: c# .net asp.net-mvc entity-framework unit-testing

我正在尝试将单元测试添加到我的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的控制器的极简主义方法是什么?

1 个答案:

答案 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。