首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NUnit不拾取数据库连接字符串

NUnit不拾取数据库连接字符串
EN

Stack Overflow用户
提问于 2018-03-23 11:50:14
回答 2查看 945关注 0票数 1

我有一个项目和一个单元测试项目(SLR.Tests)。

与数据库交互的方法的每个测试都会失败。

“对象未设置为对象的实例”

线路上的异常

代码语言:javascript
复制
using (SqlConnection con = 
new SqlConnection(ConfigurationManager.ConnectionStrings["isvConnectionString"].ToString()))

将连接字符串硬编码到新语句中会像预期的那样工作,并且在运行SLR项目过程中调用该方法不会引发任何异常。

因此,NUnit似乎没有拿起配置文件

我查过SLR的Bin文件夹了。“测试”文件夹包含SLR.DLL和SLR.DLL.Config,并且配置文件与单反项目中的web.config文件相同。

测试项目同时安装了NUnit(V3.10.1)和NUit3TestAdapter(V3.10.0)。

对这里发生了什么有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-23 12:12:15

测试项目需要具有与正在测试的项目类似的设置的app.cofig

测试项目在单独的应用程序域中运行,因此它们需要自己的配置文件。

ConfigurationManager读取正在运行的当前应用程序域的配置文件,因此从正在测试的项目复制所需的配置设置,以允许按照预期执行测试。

此问题还暴露了您的代码是如何与直接使用ConfigurationManager的实现关注点紧密耦合的,您应该考虑抽象配置访问,以便能够对它们进行模拟/替换,从而允许隔离地进行单元测试。

代码语言:javascript
复制
public interface IConfiguration {
    string AppSetting[string key] { get; }
    string ConnectionStrings[string name] { get; } 
}
票数 2
EN

Stack Overflow用户

发布于 2021-05-07 12:01:53

在我的例子中,这是一个.NET Core3.1单元测试项目(使用NUnit),将app.config重命名为testhost.dll.config解决了问题,然后ConfigurationManager可以获取配置设置。

这是因为单元测试在testhost.exe进程下运行(调试时参见VS输出窗口),而后者又与testhost.dll (出现在我的测试项目的\bin\Debug\netcoreapp3.1文件夹中)对话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49449040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档