代码之家  ›  专栏  ›  技术社区  ›  driis

如何对缺少的.NET配置节进行单元测试

  •  1
  • driis  · 技术社区  · 16 年前

    如果我有这样的代码:

            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单元测试框架。

    5 回复  |  直到 12 年前
        1
  •  2
  •   Jon Skeet    16 年前

    我认为到目前为止其他的答案都没有抓住你问题的要点,那就是如何 激起 例外情况。

    使用这样的静态技术,您真的很难做到——您必须有一种方法将特定的配置注入到您的测试中。我似乎记得.NET配置管理并不是特别适合这种情况,但我认为它 可以 完成。我现在没有简单的msdn访问权限,但是尝试找到加载 实例 而不是仅仅用静态方法访问它。我可能错了-可能没有办法做到。

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

        2
  •  2
  •   Christian.K    16 年前

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

        3
  •  1
  •   tsimon    16 年前

    为了让斯莱塞的回答更清楚一点,应该是这样的:

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

    这并不好(因为您没有显式地测试空情况)。如果您想进入该步骤,您可能需要创建自己的配置加载程序,然后用另一个具有已知缺失部分的配置测试它。

        4
  •  0
  •   Aaron Powell    16 年前

    你可以在一个 try catch 站起来做一个 Assert 在捕捉中。

        5
  •  0
  •   Ducati007    12 年前