3

背景:

目前,我们有大约 10 个单元/集成测试项目,这些项目针对数据库进行测试。命中数据库的每个测试类都继承自一个名为的类,该类IntegrationTest位于一个名为TestBase. 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 继承)

问题:

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

有没有办法在一个单独的 dll 中包含的 xml 配置文件上使用 xml 转换,而不是单元测试项目?

4

2 回答 2

3

您可以通过从 msbuild 调用目标来手动运行转换,如下所述:http: //sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx

更新

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

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

解决这个问题的一些建议:

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

  2. 在 TestSettings 文件(而不是 DeploymentItemAttribute)中配置部署选项以从TestBase文件夹复制生成的文件。(<解决方案目录>\TestBase\bin\Debug\cfg.xml); 或者

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

(另外,疯狂支持 @SayedIbrahimHashimi,他是 SlowCheetahXml 背后的主要贡献者之一——大粉丝,非常喜欢这个扩展)

于 2012-10-13T01:16:43.743 回答
-1

SlowCheetah - XML 转换免费

此包使您能够根据构建配置转换您的 app.config 或任何其他 XML 文件。它还添加了额外的工具来帮助您创建 XML 转换。

于 2013-01-16T18:50:51.273 回答