C# 在单元测试中使用xml转换 背景:

C# 在单元测试中使用xml转换 背景:,c#,visual-studio-2010,unit-testing,slowcheetah,xslt,C#,Visual Studio 2010,Unit Testing,Slowcheetah,Xslt,目前,我们有大约10个单元/集成测试项目,它们通过数据库进行测试。命中数据库的每个测试类都继承自名为IntegrationTest的类,该类位于名为TestBase的单独dll中TestBase包含一个配置文件(nhibernate_log4net.cfg.xml),其中包含到数据库的连接字符串 我们的开发团队大约有7到8人。如果两个团队成员同时运行单元测试,则会出现冲突,因为许多测试都在添加和删除数据,这在许多测试中很常见。这将导致两个开发人员之间的测试错误地失败 布局: TestBase.d

目前,我们有大约10个单元/集成测试项目,它们通过数据库进行测试。命中数据库的每个测试类都继承自名为
IntegrationTest
的类,该类位于名为
TestBase
的单独dll中
TestBase
包含一个配置文件(nhibernate_log4net.cfg.xml),其中包含到数据库的连接字符串

我们的开发团队大约有7到8人。如果两个团队成员同时运行单元测试,则会出现冲突,因为许多测试都在添加和删除数据,这在许多测试中很常见。这将导致两个开发人员之间的测试错误地失败

布局: TestBase.dll
IntegrationTest.cs(包含[DeploymentItem(“nhibernate_log4net.cfg.xml”)
nhibernate_log4net.cfg.xml
nhibernate_log4net.cfg.Developer 1.xml(转换文件)
nhibernate_log4net.cfg.Developer 2.xml(转换文件)

UnitTest.dll
参考->TestBase.dll
MyUnitTest.cs(继承自TestBase.dll中的IntegrationTest)

问题: 我的想法是为团队中的每个开发人员在
TestBase
dll中的配置文件上使用
SlowCheetah
xml转换,但转换后的文件不会复制到单元测试的Out目录。基本配置文件(未转换的一个)是被复制到out目录的文件。我感觉这是因为我必须首先使用
[DeploymentItem(“nhibernate_log4net.cfg.xml”)
属性来获取配置文件


对于包含在单元测试项目之外的单独dll中的xml配置文件,是否有任何方法可以使用xml转换?

您可以通过从msbuild调用目标来手动运行转换,如下所述:

更新

我已经能够重现你的问题。这很微妙,但我认为它正在按预期工作。下面是发生的情况:

  • 正在应用配置转换。转换后的文件位于TestBase输出目录中
  • 您在测试中指定了*[DeploymentItem(“nhibernate_log4net.cfg.xml”)]*,但由于该文件与UnitTest项目不相关,因此此操作失败。为了补偿此问题,您将配置文件标记为“Copy Local”=true
  • “复制本地”确保将TestBase项目的内容复制到UnitTest项目,但它要么从源位置复制预转换的文件,要么在XmlTransform任务运行之前将文件移动到bin文件夹中。(我倾向于认为是前者)
解决这一问题的几点建议:

  • 将配置文件移动到UnitTest库并在那里应用转换,这将确保配置可按预期随时供测试运行程序使用;或

  • 在TestSettings文件(而不是DeploymentItemAttribute)中配置部署选项,以从TestBase文件夹复制生成的文件。(\TestBase\bin\Debug\cfg.xml);或

  • 更改项目,使它们共享相同的输出目录。这将确保DeploymentItem属性将转换后的TestBase配置文件复制到TestRun文件夹。(顺便说一句,共享输出文件夹是加快构建速度的好方法,因为依赖项和内容不需要一次又一次地复制)

  • (还有,mad向@SayedIbrahimHashimi提供了支持,他是SlowCheetahXml的主要贡献者之一——大粉丝,非常喜欢这个扩展)


    此软件包使您能够基于生成配置转换app.config或任何其他XML文件。它还添加了其他工具来帮助您创建XML转换。

    在这种情况下,建议使用TransformXml任务。@SayedIbrahimHashimi使用TransformXml任务似乎不适用于我。它仍然没有将正确的配置文件复制到单元测试的out目录。当前,我正在转换的配置文件被设置为“始终复制”。如果我将其设置为“不复制”配置文件仍然被转换并放在生成文件夹中,但它根本没有被复制到输出文件夹。这几乎就像单元测试试图在转换前获取文件一样。@SayedIbrahimHashimi我刚刚尝试独立地将TransformXml任务移到BeforeBuild和AfterBuild目标中,两个目标似乎都没有任何效果等我设置好“复制到输出目录”属性不复制我不了解依赖程序集app.config文件首先是如何复制到单元测试项目的bin文件夹的。这不是标准行为。@SayedIbrahimHashimi我在上面的问题中详细阐述了我的场景。结果是,我甚至无法将转换后的xml文件复制到首先是UnitTest.dll项目的bin文件夹。如果我将Copy to output directory属性设置为Copy Always,它只会复制原始配置文件(nhibernate_log4net.cfg.xml)以及所有转换文件到UnitTest.dll bin文件夹。感谢您迄今为止的帮助。我已经试过了,正如我的问题中所指出的。SlowCheetah的创建者在评论中回复了,并且也承认了已经给出的答案。我认为您没有仔细阅读问题和答案。