NUnit测试报错:找不到已配置的'SomeEntities'连接字符串
以下是几个易忽略的排查点和解决方法:
检查app.config的复制输出设置
右键NUnit项目中的app.config → 属性 → 确认“复制到输出目录”设置为「如果较新则复制」或「始终复制」。测试运行时会读取输出目录下的配置文件,若app.config未被复制到输出目录,就会出现找不到连接字符串的报错。确保Entity Framework配置完整
NUnit项目的app.config中,除了连接字符串,还必须包含EF的核心配置节,示例如下:<configSections> <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="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>缺少这些配置,即使存在连接字符串,EF也无法正常读取。
核对测试项目的依赖引用
确认NUnit项目已正确安装与MVC项目版本一致的Entity Framework相关NuGet包(如EntityFramework和EntityFramework.SqlServer)。依赖缺失或版本不匹配会导致EF无法加载配置。验证连接字符串的准确性
仔细检查NUnit项目app.config中连接字符串的名称是否完全为SomeEntities(注意部分测试环境可能区分大小写),同时确保EF实体连接字符串格式正确,示例:<connectionStrings> <add name="SomeEntities" connectionString="metadata=res://*/Models.SomeModel.csdl|res://*/Models.SomeModel.ssdl|res://*/Models.SomeModel.msl;provider=System.Data.SqlClient;provider connection string="data source=YOUR_SERVER;initial catalog=YOUR_DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> </connectionStrings>EF实体连接字符串需包含
metadata部分,不能仅使用普通数据库连接字符串。排查测试运行路径
部分测试运行器(如ReSharper测试 runner)可能使用非输出目录作为工作目录,导致读取不到配置文件。可在测试代码中添加调试代码查看当前工作目录:Console.WriteLine(System.IO.Directory.GetCurrentDirectory());检查该目录下是否存在
[你的测试项目名].dll.config(app.config编译后的文件名),若不存在,手动复制app.config到该目录测试。
内容的提问来源于stack exchange,提问作者Doug Gardiner

