NUnit测试项目无法读取数据库连接字符串,请求排查原因
解决NUnit测试中无法读取连接字符串的问题
这个问题我之前排查过好几次,核心就是NUnit测试运行时的配置读取逻辑和主项目完全不一样,咱们一步步拆解可能的原因和解决办法:
1. 测试项目缺少专属的App.config文件
类库项目(SLR)的web.config编译后会生成SLR.dll.config,但NUnit测试运行时,默认只会读取测试项目(SLR.Tests)自己的配置文件(也就是编译后的SLR.Tests.dll.config,对应项目里的App.config),根本不会去读依赖类库的.config文件。
解决步骤:
- 在SLR.Tests项目里右键→添加→新建项→选择「应用程序配置文件」,创建一个App.config
- 把SLR项目web.config里的
<connectionStrings>节点完整复制到这个App.config中,确保isvConnectionString节点存在且配置正确。
2. 测试项目的App.config未被正确复制到输出目录
就算加了App.config,如果它没被同步到bin目录,测试依然读不到配置。检查一下:
- 右键测试项目里的App.config→属性
- 把「复制到输出目录」设置为始终复制或者如果较新则复制
3. 对ConfigurationManager的读取逻辑存在误区
一定要记住:类库中的ConfigurationManager读取的是当前执行程序的配置文件,也就是测试项目的配置,不是类库自己的。哪怕SLR.dll.config躺在bin文件夹里,测试运行时也不会去加载它——必须把连接字符串放到测试项目的App.config里才有用。
4. 测试运行的工作目录异常
有时候测试运行器的工作目录不是项目的bin文件夹,导致找不到配置文件。可以在测试方法里加一行代码验证:
using System.IO; // ... Console.WriteLine(Directory.GetCurrentDirectory());
运行测试后看输出,如果不是SLR.Tests的bin/Debug或bin/Release目录,可能需要在Visual Studio的测试设置里手动指定工作目录。
5. NUnit版本或适配器的兼容性问题
虽然你用的3.10.x版本不算太老,但偶尔旧版本的测试适配器会有配置读取的小bug。可以试试:
- 通过NuGet包管理器,把NUnit和NUnit3TestAdapter更新到最新的稳定版
- 清理解决方案后重新生成,再运行测试
内容的提问来源于stack exchange,提问作者user70568
相关产品推荐
相关产品推荐

