C# 在单元测试中使用xml转换 背景:
目前,我们有大约10个单元/集成测试项目,它们通过数据库进行测试。命中数据库的每个测试类都继承自名为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
IntegrationTest
的类,该类位于名为TestBase
的单独dll中TestBase
包含一个配置文件(nhibernate_log4net.cfg.xml),其中包含到数据库的连接字符串
我们的开发团队大约有7到8人。如果两个团队成员同时运行单元测试,则会出现冲突,因为许多测试都在添加和删除数据,这在许多测试中很常见。这将导致两个开发人员之间的测试错误地失败
布局:
TestBase.dllIntegrationTest.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文件夹中。(我倾向于认为是前者)
此软件包使您能够基于生成配置转换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的创建者在评论中回复了,并且也承认了已经给出的答案。我认为您没有仔细阅读问题和答案。