目前,我们有大约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)
我的想法是在团队中的每个开发人员的SlowCheetah
dll中对配置文件使用TestBase
xml转换,但转换后的文件不会被复制到 Out 单元测试目录。基本配置文件(未转换的文件)是被复制到 Out 目录的文件。我有一种感觉,因为我必须首先使用[DeploymentItem("nhibernate_log4net.cfg.xml")
属性来获取配置文件。
有没有办法在xml配置文件上使用xml转换,该文件包含在单独的dll中,而不是单元测试项目?
答案 0 :(得分:3)
您可以通过从msbuild调用目标来手动运行转换,如下所示:http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx
<强>更新强>
我能够重现你的问题。它很微妙,但我认为它正如预期的那样工作。这是正在发生的事情:
很少有建议可以解决这个问题:
将配置文件移动到 UnitTest 库并在那里应用转换,这将确保配置随时可供测试运行器使用;或
在TestSettings文件(而不是DeploymentItemAttribute)中配置部署选项,以从 TestBase 文件夹中复制生成的文件。 (&lt; Solution Directory&gt; \ TestBase \ bin \ Debug \ cfg.xml);或
更改项目,使它们共享同一个Output目录。这将确保DeploymentItem属性将已转换的TestBase配置文件复制到TestRun文件夹。 (顺便说一句,共享输出文件夹是加速构建的好方法,因为不需要一次又一次地复制依赖项和内容)
(另外,疯狂支持@SayedIbrahimHashimi谁是SlowCheetahXml背后的主要贡献者之一 - 大粉丝,挖掘这个扩展很多)
答案 1 :(得分:-1)
SlowCheetah - XML Transforms Free
此程序包使您可以根据构建配置转换app.config或任何其他XML文件。它还添加了额外的工具来帮助您创建XML转换。