【问题标题】:NUnit not picking up the database connection stringNUnit 没有获取数据库连接字符串
【发布时间】:2018-03-23 11:50:14
【问题描述】:

我有一个项目(SLR)和一个 Nunit 测试项目(SLR.Tests

与数据库交互的方法的每个测试都失败并带有一个

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

异常就行了

using (SqlConnection con = 
new SqlConnection(ConfigurationManager.ConnectionStrings["isvConnectionString"].ToString()))

将连接字符串硬编码到新语句中按预期工作,并且 在单反项目运行过程中调用该方法不会抛出任何异常。

因此,NUnit 似乎没有获取配置文件

我已经检查了 SLR 的 Bin 文件夹。 Tests文件夹包含SLR.DLLSLR.DLL.Config,配置文件与SLR项目中的web.config文件相同。

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

对这里发生的事情有什么想法吗?

【问题讨论】:

    标签: c# unit-testing web-config nunit


    【解决方案1】:

    测试项目需要app.cofig,其设置与被测试项目中的设置相似。

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

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

    这个问题还暴露了您的代码如何在直接使用ConfigurationManager 方面与实现问题紧密耦合,您应该考虑抽象配置访问,以便可以模拟/替换它们以允许单独完成单元测试。

    public interface IConfiguration {
        string AppSetting[string key] { get; }
        string ConnectionStrings[string name] { get; } 
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2019-01-27
        • 1970-01-01
        • 2016-11-12
        • 2012-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多