NUnit 没有获取数据库连接字符串
NUnit not picking up the database connection string
我有一个项目(SLR)和一个Nunit测试项目(SLR.Tests)
与数据库交互的方法的每个测试都失败并显示
"object not set to an instance of an object"
线上异常
using (SqlConnection con =
new SqlConnection(ConfigurationManager.ConnectionStrings["isvConnectionString"].ToString()))
将连接字符串硬编码到新语句中按预期工作,并且
运行 单反项目中调用该方法不会抛出任何异常。
因此 NUnit 似乎没有获取配置文件
我查看了单反的Bin文件夹。测试文件夹包含 SLR.DLL 和 SLR.DLL.Config 并且配置文件与 web.config
单反项目中的文件。
测试项目同时安装了 NUnit(V3.10.1) 和 NUit3TestAdapter(V3.10.0)。
对这里发生的事情有什么想法吗?
测试项目需要 app.cofig
具有与正在测试的项目类似的设置。
在单独的应用程序域中测试项目 运行,因此它们需要自己的配置文件。
ConfigurationManager
读取当前应用程序域的配置文件运行,因此从正在测试的项目中复制所需的配置设置,以允许测试按预期进行。
这个问题还暴露了您的代码在直接使用 ConfigurationManager
方面如何与实现问题紧密耦合,您应该考虑抽象配置访问,以便它们可以 mocked/replaced 允许单元测试隔离完成。
public interface IConfiguration {
string AppSetting[string key] { get; }
string ConnectionStrings[string name] { get; }
}
在我的例子中,这是一个 .NET Core 3.1 单元测试项目(使用 NUnit),将 app.config
重命名为 testhost.dll.config
解决了问题并且然后 ConfigurationManager 可以获取配置设置。
这是因为单元测试 运行 在 testhost.exe
进程下(调试时查看 VS 输出 window),它又与 testhost.dll
对话(这出现在我的测试项目的 \bin\Debug\netcoreapp3.1
文件夹中)。
我有一个项目(SLR)和一个Nunit测试项目(SLR.Tests)
与数据库交互的方法的每个测试都失败并显示
"object not set to an instance of an object"
线上异常
using (SqlConnection con =
new SqlConnection(ConfigurationManager.ConnectionStrings["isvConnectionString"].ToString()))
将连接字符串硬编码到新语句中按预期工作,并且 运行 单反项目中调用该方法不会抛出任何异常。
因此 NUnit 似乎没有获取配置文件
我查看了单反的Bin文件夹。测试文件夹包含 SLR.DLL 和 SLR.DLL.Config 并且配置文件与 web.config
单反项目中的文件。
测试项目同时安装了 NUnit(V3.10.1) 和 NUit3TestAdapter(V3.10.0)。
对这里发生的事情有什么想法吗?
测试项目需要 app.cofig
具有与正在测试的项目类似的设置。
在单独的应用程序域中测试项目 运行,因此它们需要自己的配置文件。
ConfigurationManager
读取当前应用程序域的配置文件运行,因此从正在测试的项目中复制所需的配置设置,以允许测试按预期进行。
这个问题还暴露了您的代码在直接使用 ConfigurationManager
方面如何与实现问题紧密耦合,您应该考虑抽象配置访问,以便它们可以 mocked/replaced 允许单元测试隔离完成。
public interface IConfiguration {
string AppSetting[string key] { get; }
string ConnectionStrings[string name] { get; }
}
在我的例子中,这是一个 .NET Core 3.1 单元测试项目(使用 NUnit),将 app.config
重命名为 testhost.dll.config
解决了问题并且然后 ConfigurationManager 可以获取配置设置。
这是因为单元测试 运行 在 testhost.exe
进程下(调试时查看 VS 输出 window),它又与 testhost.dll
对话(这出现在我的测试项目的 \bin\Debug\netcoreapp3.1
文件夹中)。