我有一个项目和一个单元测试项目(SLR.Tests)。
与数据库交互的方法的每个测试都会失败。
“对象未设置为对象的实例”
线路上的异常
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)。
对这里发生了什么有什么想法吗?
发布于 2018-03-23 12:12:15
测试项目需要具有与正在测试的项目类似的设置的app.cofig。
测试项目在单独的应用程序域中运行,因此它们需要自己的配置文件。
ConfigurationManager读取正在运行的当前应用程序域的配置文件,因此从正在测试的项目复制所需的配置设置,以允许按照预期执行测试。
此问题还暴露了您的代码是如何与直接使用ConfigurationManager的实现关注点紧密耦合的,您应该考虑抽象配置访问,以便能够对它们进行模拟/替换,从而允许隔离地进行单元测试。
public interface IConfiguration {
string AppSetting[string key] { get; }
string ConnectionStrings[string name] { get; }
}发布于 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文件夹中)对话。
https://stackoverflow.com/questions/49449040
复制相似问题