Asp.net 对配置转换应用TDD/单元测试?
是否有人知道可以应用于有效单元测试配置转换的任何技术或框架,特别是在构建服务器上 例如,如果我在基本配置中添加了一个新的连接字符串,有没有办法编写一个自动测试来确保正确的值应用于QA和产品配置Asp.net 对配置转换应用TDD/单元测试?,asp.net,web-config,tdd,tfsbuild,Asp.net,Web Config,Tdd,Tfsbuild,是否有人知道可以应用于有效单元测试配置转换的任何技术或框架,特别是在构建服务器上 例如,如果我在基本配置中添加了一个新的连接字符串,有没有办法编写一个自动测试来确保正确的值应用于QA和产品配置 在这个想法的基础上,如果能够在基本配置中指定某些应该有转换的项,以捕捉那些转换没有添加到环境配置中的不可避免的情况,那将是一件好事。这可能不是我想要的,但我确实偶然发现,这似乎为验证配置文件中的值提供了一种相当合理的机制。有关详细信息,请参阅博文。它不与构建服务器集成,但提供了一种方便的方法来生成转换结果
在这个想法的基础上,如果能够在基本配置中指定某些应该有转换的项,以捕捉那些转换没有添加到环境配置中的不可避免的情况,那将是一件好事。这可能不是我想要的,但我确实偶然发现,这似乎为验证配置文件中的值提供了一种相当合理的机制。有关详细信息,请参阅博文。它不与构建服务器集成,但提供了一种方便的方法来生成转换结果,并确保它们符合您的要求 通过
还可以选择使用microsoft.web.xdt nuget包滚动您自己的解决方案。以下是。我最终使用了以下流程: 转到web.config并在visual studio中转换测试项目中的文件。
将文件属性更改为“更新时复制”。
将nuget引用添加到 您现在应该能够将web.config及其转换加载到单元测试中,类似于下面的测试:
注意:我正在使用和进行此测试
[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有什么方法可以验证转换后的配置中是否存在特定的值。例如,如果从web.debug.config中删除转换,则只会使用web.config中的值。
[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);
}
}