我正在尝试让Team City构建我的.NET解决方案并运行我的nUnit测试。
我知道我可以修改单个项目并告诉他们总是运行单元测试。当我在visual studio中单击“build”时,不希望单元测试运行,但我做希望在Team City启动msbuild时运行单元测试任务。
我尝试了“msbuild solutionname.sln”,并为团队城市提供了“BUILD”和我的自定义构建标记“TEST”的目标。但是,在针对sln解决方案调用时,msbuild无法找到任何指定的目标。 所以,我运行msbuild将我的解决方案转换为一个具有以下目标的项目:
<Target Name="Build">
<MSBuild Projects="@(BuildLevel0)" >
</Target>
我天真地以为我可以写一个像这样的新任务:
<Target Name="BuildAndTest">
<CallTarget Targets="Build"/> <!-- This builds everything in solution -->
<CallTarget Targets="Test"/> <!-- DOES NOT WORK. This target exists in project that gets built by this solution -->
</Target>
nunit目标如下所示:
<Target Name="Test" DependsOnTargets="Build" Condition=" '$(Configuration)' == 'Release'">
<NUnit Assemblies="$(OutputPath)\Tsa.BaseTest.dll" ContinueOnError="false" ToolPath="C:\Program Files\NUnit 2.5.2\bin\net-2.0\" DisableShadowCopy="true" OutputXmlFile="$(OutputPath)\nunit-results.xml" />
</Target>
正如您所看到的,它引用了OutputPath,只有项目知道 - 解决方案没有引用$ OutputPath,否则我只是将所有测试目标放入“解决方案项目”。
关于如何让它发挥作用的任何建议?
答案 0 :(得分:1)
我认为你做的比现在要困难得多。 TeamCity内置支持在构建后运行NUnit单元测试 - 您根本不需要修改MSBuild文件。只需设置构建配置(我认为它在Runner下)来指定NUnit的版本以及哪些程序集是测试程序集。
注意:我检查过,我们在TeamCity企业版4.5.4中的Runner:sln2008(部分NUnit测试设置)下有这个,但我在JetBrains网站上没有看到任何声明它特定于Enterprise的内容。但是,它可能需要进行版本升级。请参阅TeamCity Testing Frameworks。
答案 1 :(得分:0)
这是最终奏效的。它被视觉工作室忽略,msbuild将正确运行此部分,并且团队城市也将如此,尽管它用自己的运行时替换目标(根据构建日志)。
TeamCity将“自动”运行nunit测试并显示结果,只是在手动编辑msbuild文件后执行此操作,执行大量手动teak并告诉TeamCity每个程序集的位置以及每个输出文件的位置。
<Project (snip) DefaultTargets="BuildAndTest" (snip)>
<Target Name="BuildAndTest">
<CallTarget Targets="Build" />
<CallTarget Targets="TestBase" />
</Target>
<Target Name="TestBase" DependsOnTargets="Build">
<NUnit Assemblies="Tsa.BaseTest\bin\RELEASE\Tsa.BaseTest.dll" ContinueOnError="false" ToolPath="C:\Program Files\NUnit 2.5.2\bin\net-2.0\" DisableShadowCopy="true" OutputXmlFile="$(SolutionDir)\Tsa.BaseTest\bin\RELEASE\nunit-results.xml" />
</Target>
</Target>
</Project>