【问题标题】:How to Unit Test a missing .NET ConfigurationSection如何对缺少的 .NET ConfigurationSection 进行单元测试
【发布时间】:2008-11-25 06:54:07
【问题描述】:

如果我有这样的代码:

        public XALServiceConfiguration CreateInstance()
        {
            var config = ConfigurationManager.GetSection(ConfigurationSectionName) as XALServiceConfiguration;
            if (config == null)
                throw new ConfigurationErrorsException("Configuration element 'xalService' was not found or is not of correct type.");
            return config;
        }

如果配置文件中缺少该部分,我如何测试是否引发了异常?对于其他测试,配置部分需要在配置文件中,所以我实际上无法从文件中删除它。

我正在使用 Visual Studio 2008 单元测试框架。

【问题讨论】:

    标签: .net unit-testing configuration


    【解决方案1】:

    我认为到目前为止的其他答案都错过了您问题的重点,即如何引发异常。

    使用这样的静态技术,你真的不能轻易做到 - 你必须有一种方法将特定的配置注入到你的测试中。我似乎记得 .NET 配置管理并不是特别适合这个,但我认为它可以完成。我现在无法轻松访问 MSDN,但尝试找到某种方式来加载配置的 instance,而不是仅使用静态方法访问它。我可能是错的 - 可能没有办法做到这一点。

    不要太担心 100% 的覆盖率 - 不幸的是,有时只是无法测试的条件:(

    【讨论】:

      【解决方案2】:

      您可以在单独的应用程序域中运行测试用例。为此,您可以指定要使用的配置文件,甚至可以将配置文件指定为“字节”(参见AppDomainSetup Structure

      【讨论】:

      • 不错。这是一件非常痛苦的事情(对于一个单一的测试,我可能不会打扰)但是 +1 用于解释它是如何可以完成的 :)
      【解决方案3】:

      为了让 Slace 的回答更清楚一点,它看起来像这样:

      try {
        XALServiceConfiguration config = CreateInstance();
      } catch (ConfigurationErrorsException cee) {
        Assert.Fail("Could not create XALServiceConfiguration: " + e.Message);
      }
      

      这不是很好(因为您没有明确测试 null 情况。如果您想进入该步骤,您可能必须创建自己的配置加载器,然后针对已知缺失部分的不同配置进行测试。

      【讨论】:

        【解决方案4】:

        您可以在 try catch 语句中捕获异常并在捕获中执行 Assert

        【讨论】:

          【解决方案5】:

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-01-06
            • 2018-05-08
            • 2012-01-08
            • 1970-01-01
            • 2017-05-12
            • 2019-11-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多