【发布时间】:2013-03-26 21:05:09
【问题描述】:
是否有人知道任何可用于有效单元测试配置转换的技术或框架,尤其是在构建服务器上?
例如,如果我在基本配置中添加一个新的连接字符串,有没有办法编写自动化测试来确保将正确的值应用于 QA 和产品配置?
扩展这个想法,如果能够在基本配置中指定应该具有变换的某些项目,以捕捉那些未将变换添加到环境配置中的不可避免的情况,那就太好了。
【问题讨论】:
标签: asp.net web-config tdd tfsbuild
是否有人知道任何可用于有效单元测试配置转换的技术或框架,尤其是在构建服务器上?
例如,如果我在基本配置中添加一个新的连接字符串,有没有办法编写自动化测试来确保将正确的值应用于 QA 和产品配置?
扩展这个想法,如果能够在基本配置中指定应该具有变换的某些项目,以捕捉那些未将变换添加到环境配置中的不可避免的情况,那就太好了。
【问题讨论】:
标签: asp.net web-config tdd tfsbuild
我最终使用了以下流程:
Create a link 到您的 web.config 并从 Visual Studio 中的测试项目转换文件。
将文件属性更改为“如果较新则复制”。
添加对Microsoft Xml Document Transformation的nuget引用
Install-Package Microsoft.Web.Xdt -Pre
您现在应该能够将 web.config 及其转换加载到单元测试中,如下所示:
注意:我使用NUnit 和Fluent 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 非常方便。
【讨论】:
它不与您的构建服务器集成,但SlowCheetah XML Transforms extension 为您提供了一种方便的方式来生成转换结果并确保它们是您想要的。
SlowCheetah is also available as a NuGet package。
您还可以选择使用 microsoft.web.xdt nuget 包推出您自己的解决方案。这是how to invoke XDT from code。
【讨论】: