如何验证debug="false"在网络上.通过单元测试进行配置
本文关键字:quot 网络 单元测试 配置 false debug 验证 何验证 | 更新日期: 2023-09-27 18:04:22
我使用ASP.NET MVC4
, Microsoft.VisualStudio.TestTools.UnitTesting
和Jenkins
。在我的网里。我想通过单元测试确保属性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");
}
}
像这样测试配置会给您一种错误的安全感,因为配置可以在部署后更改。这与您正在进行单元测试的其他代码不同,后者需要重新编译才能使更改生效。
如果您仍然希望对这种情况进行测试,那么您的测试将需要手动加载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);
}
}
}