1

我目前正在努力App.config从我的类库(和单元测试)中读取我的 WinForms 应用程序内部的连接字符串。

App.config我在;中添加了一个“测试”条目

<connectionStrings>
     <add name="MyConnString" connectionString="Test;" />
</connectionStrings>

我的 TestMethod 看起来像这样;

    [TestMethod]
    public void TestConnection1()
    {
        string connString = "";

        if (ConfigurationManager.ConnectionStrings["MyConnString"] != null)
        {
            connString = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString;
        }

        string expected = "Test;";
        string actual = connString;

        Assert.AreEqual(expected, actual);
    }

这显然失败了。Actual的值为空。我究竟做错了什么?

在此处输入图像描述

4

2 回答 2

1

您还需要将连接字符串键添加到测试项目的配置中。

于 2013-03-08T08:52:11.110 回答
1

关于您对 DJ Kraze 的评论:“ @DJ KRAZE,如果我将 0 作为索引,它会返回一个 SQLExpress“aspnetdb.mdf”的连接字符串。如果我将 1 作为索引,我会得到一个异常 ( IndexOutOfRangeException),所以很明显我的字符串没有找到。”

问题是您忘记了配置元素。例如:

引用自 MSDN:存储和检索连接字符串

<?xml version='1.0' encoding='utf-8'?>
  <configuration>
    <connectionStrings>
      <clear />
      <add name="Name" 
       providerName="System.Data.ProviderName" 
       connectionString="Valid Connection String;" />
    </connectionStrings>
  </configuration>

machine.config 文件还包含一个<connectionStrings>部分,其中包含 Visual Studio 使用的连接字符串。在 Windows 应用程序的app.config文件中按提供程序名称检索连接字符串时,首先加载 machine.config 中的连接字符串,然后是app.config中的条目。在 connectionStrings 元素之后立即添加 clear 会从内存中的数据结构中删除所有继承的引用,以便仅考虑本地app.config文件中定义的连接字符串。

于 2013-03-08T09:14:18.653 回答