我在Cruise Control中配置了一个运行NAnt脚本的任务,该脚本运行MSTest套件。 MSTest允许我指定测试类别,因此我想指定“!Integration”(这意味着“不运行集成测试”)。当我从命令行运行它时,我的Nant脚本成功运行,但是当Cruise运行它时,“!Integration”指令出现乱码 - Cruise输出表明它在'!'之后插入一个换行符。字符。结果是所有我的测试运行,包括集成测试。
从ccnet.config中提取:
<tasks>
<nant>
<executable>C:\nant\bin\nant.exe</executable>
<baseDirectory>C:\MyProject\BuildDirectory</baseDirectory>
<buildFile>MyProject.build</buildFile>
<targetList>
<target>CIServerBuild</target>
</targetList>
</nant>
</tasks>
从MyProject.build提取:
<target name="CIServerBuild">
:
<call target="RunUnitTests" />
</target>
<target name="RunUnitTests">
<property name="TestCategories" value="!Integration" />
<call target="RunMSTest" failonerror="true"/>
</target>
<target name="RunMSTest">
<call target="BuildListOfTestContainers" failonerror="true"/>
<exec program="${MSTest.exe}"
commandline=" /category:"${TestCategories}" ${TestContainers} /resultsfile:${MSTest.ResultsFile} /nologo "
/>
</target>
从Cruise输出中提取:
[exec] Starting 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe ( /category:"!
Integration" /testcontainer:C:\TaxWise\BuildDirectory\TaxWise\TaxWise.Data.Tests\bin\Debug\TaxWise.Data.Tests.dll /testcontainer:C:\TaxWise\BuildDirectory\TaxWise\TaxWise.Domain.Tests\bin\Debug\TaxWise.Domain.Tests.dll /testcontainer:C:\TaxWise\BuildDirectory\TaxWise\TaxWise.Infrastructure.Tests\bin\Debug\TaxWise.Infrastructure.Tests.dll /resultsfile:.\TestResults\UnitTests.trx /nologo )'
in 'C:\TaxWise\BuildDirectory'
我试过更换'!'
字符'!'
但这没有任何区别。
任何想法,任何人?
答案 0 :(得分:1)
我建议将exec任务中的命令行属性拆分为Nant arg元素。
http://nant.sourceforge.net/release/0.85/help/tasks/exec.html
您将获得更大的灵活性,可读性将会提高。
答案 1 :(得分:0)
是的,也许它不是由CC引起的。尝试在verbose="True"
任务上设置<exec>
并检查原始构建协议。请记住,您在报告页面上看到的内容并不是确切的输出(通常受到换行和合并空格的影响)。
可能取决于您运行脚本的位置,对构建属性或不同环境变量的隐藏依赖性。您可以使用<exec program="cmd.exe" commandline="/c set" />
检查后者。对于属性,您可以使用以下脚本:
<script language="C#" prefix="util" verbose="true">
<code>
<![CDATA[
public static void ScriptMain(Project project)
{
foreach (DictionaryEntry entry in new System.Collections.SortedList(project.Properties) )
Console.WriteLine("{0}={1}", entry.Key, entry.Value);
}
]]>
</code>
</script>