如何验证debug="false"在网络上.通过单元测试进行配置

本文关键字:quot 网络 单元测试 配置 false debug 验证 何验证 | 更新日期: 2023-09-27 18:04:22

我使用ASP.NET MVC4, Microsoft.VisualStudio.TestTools.UnitTestingJenkins。在我的网里。我想通过单元测试确保属性debug被设置为false:

<configuration>
[...]
  <system.web>
    <compilation debug="false">
[...]

我如何使用单元测试来确保这一点?

[TestClass]
    public class WebConfigTest
    {
        /// <summary>
        /// in Web.config, debug mode must be set to 'false'
        /// </summary>
        [TestMethod]
        public void TestDebugFalse()
        {
            // Arrange
            // Act
            // Assert
            Assert.AreEqual(?, "false");
        }
    }

如何验证debug="false"在网络上.通过单元测试进行配置

像这样测试配置会给您一种错误的安全感,因为配置可以在部署后更改。这与您正在进行单元测试的其他代码不同,后者需要重新编译才能使更改生效。

如果您仍然希望对这种情况进行测试,那么您的测试将需要手动加载web.config文件并解析它以获得预期的值。(您不能使用ConfigurationManager,因为您的测试项目使用自己的app.config,而不是您所瞄准的web.config。)

例如:

using System.Xml.Linq;
using System.Xml.XPath;
[TestClass]
public class WebConfigTest
{
    /// <summary>
    /// in Web.config, debug mode must be set to 'false'
    /// </summary>
    [TestMethod]
    public void TestDebugFalse()
    {
        var path        = @"Path to web.config";
        var config      = XDocument.Load(path);
        var compilation = config.XPathSelectElement("/configuration/system.web/compilation");
        if(compilation != null)
        {
            var debug = compilation.Attribute("debug");
            if(debug != null)
            {
                Assert.AreEqual("false", debug.Value);
            }
        }
    }
}

Edit: Joe在评论中提到,您可以选择使用WebConfigurationManager来获取此信息,而无需XML解析。例如:

[TestClass]
public class WebConfigTest
{
    /// <summary>
    /// in Web.config, debug mode must be set to 'false'
    /// </summary>
    [TestMethod]
    public void TestDebugFalse()
    {
        var path                    = @"Path to web.config";
        var webConfig               = new System.IO.FileInfo(path);
        var virtualDirectoryMapping = new System.Web.Configuration.VirtualDirectoryMapping(webConfig.DirectoryName, true, webConfig.Name);
        var fileMap                 = new System.Web.Configuration.WebConfigurationFileMap();
        fileMap.VirtualDirectories.Add("/", virtualDirectoryMapping);
        var configuration           = System.Web.Configuration.WebConfigurationManager.OpenMappedWebConfiguration(fileMap, "/");
        var compilation             = configuration.GetSection("system.web/compilation") as System.Web.Configuration.CompilationSection;
        if(compilation != null)
        {
            Assert.AreEqual(false, compilation.Debug);
        }
    }
}