【问题标题】:Applying TDD/unit testing for config transforms?对配置转换应用 TDD/单元测试?
【发布时间】:2013-03-26 21:05:09
【问题描述】:

是否有人知道任何可用于有效单元测试配置转换的技术或框架,尤其是在构建服务器上?

例如,如果我在基本配置中添加一个新的连接字符串,有没有办法编写自动化测试来确保将正确的值应用于 QA 和产品配置?

扩展这个想法,如果能够在基本配置中指定应该具有变换的某些项目,以捕捉那些未将变换添加到环境配置中的不可避免的情况,那就太好了。

【问题讨论】:

    标签: asp.net web-config tdd tfsbuild


    【解决方案1】:

    我最终使用了以下流程:

    Create a link 到您的 web.config 并从 Visual Studio 中的测试项目转换文件。
    将文件属性更改为“如果较新则复制”。
    添加对Microsoft Xml Document Transformation的nuget引用

    Install-Package Microsoft.Web.Xdt -Pre
    

    您现在应该能够将 web.config 及其转换加载到单元测试中,如下所示:
    注意:我使用NUnitFluent Assertions 进行此测试。

    [Test]
    public void Transform_WhenUsingAlpha_ConnectionStringShouldPointToAlpha()
    {
        using (var webConfig = LoadWebConfig())
        {
            var transformWasSuccessful = DoXmlTransform(webConfig, "Web.Alpha.config");
            var connectionString = 
                webConfig.SelectNodes(
                "//connectionStrings/add[@name='ApplicationServices']/@connectionString")[0].Value;
    
            transformWasSuccessful.Should().BeTrue();
            connectionString.Should().Contain("_Alpha");
        }
    }
    
    public XmlTransformableDocument LoadWebConfig()
    {
        var document = new XmlTransformableDocument();
        document.PreserveWhitespace = true;
        document.Load("web.config");
        return document;
    }
    
    private bool DoXmlTransform(XmlTransformableDocument webConfig, string transformFile)
    {
        using (var transform = new XmlTransformation(transformFile))
        {
            return transform.Apply(webConfig);
        }
    }
    

    我已经针对我们的 TeamCity 构建服务器测试了这种方法,它运行良好。另外,它也适用于 NCrunch。

    如果您想手动检查 web.config 转换,SlowCheetah - XML Transforms extension 非常方便。

    【讨论】:

      【解决方案2】:

      它不与您的构建服务器集成,但SlowCheetah XML Transforms extension 为您提供了一种方便的方式来生成转换结果并确保它们是您想要的。

      SlowCheetah is also available as a NuGet package

      通过Scott Hanselman

      您还可以选择使用 microsoft.web.xdt nuget 包推出您自己的解决方案。这是how to invoke XDT from code

      【讨论】:

      • 感谢您的建议。我不知道使用 SlowCheetah 的任何方式来验证转换后的配置中是否存在特定值。例如,如果从 web.debug.config 中删除转换,则将只使用 web.config 中的值。
      【解决方案3】:

      这可能不是我想要的,但我确实偶然发现了Pester,它似乎提供了一种相当合理的机制来验证配置文件中的值。详情见this博文。

      【讨论】:

        猜你喜欢
        • 2023-03-05
        • 2011-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多