【问题标题】:How to call the a unit test target in a project from a 'solution' project如何从“解决方案”项目中调用项目中的单元测试目标
【发布时间】:2009-09-22 19:05:26
【问题描述】:

我正在尝试让 Team City 构建我的 .NET 解决方案并运行我的 nUnit 测试。

我知道我可以修改单个项目并告诉他们始终运行单元测试。我不希望在 Visual Studio 中单击“构建”时运行单元测试,但我确实希望在 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,否则我只需将所有测试目标放入“解决方案项目”。

关于如何让它发挥作用的任何建议?

【问题讨论】:

    标签: msbuild teamcity


    【解决方案1】:

    我认为你让这件事变得比需要的困难得多。 TeamCity 内置支持在构建后运行 NUnit 单元测试 - 您根本不需要修改 MSBuild 文件。只需设置您的构建配置(我认为它在 Runner 下)以指定 NUnit 的版本以及哪些程序集是测试程序集。

    注意:我检查过,我们在 TeamCity Enterprise 版本 4.5.4 的 Runner: sln2008(NUnit 测试设置部分)下有这个,但我在 JetBrains 网站上没有看到任何说明它特定于 Enterprise 的内容。不过,它可能需要版本升级。见TeamCity Testing Frameworks。

    【讨论】:

    • 我不确定这是否准确。我正在使用 4.5.2 专业版。该页面可以检测到 nunit 的输出(XML 报告处理部分),但 Team City 本身不能/不会导致调用 nunit 来生成此类输出。而且这个版本也没有让我列出测试程序集的文本框。
    • @Matthew - 刚刚在工作中检查过。我们正在运行 TeamCity Enterprise 4.5.4 版。在 Runner 下: sln2008 我有 NUnit 测试设置;在此之下,我可以设置运行测试并输入测试程序集的路径。还有其他几个选项。
    【解决方案2】:

    这终于奏效了。它被 Visual Studio 忽略,msbuild 将正确运行此部分,并且 team city 也会正确运行,尽管它将 Target 替换为自己的运行时(根据构建日志)。

    TeamCity 将“自动”运行 nunit 测试并显示结果,只是在手动编辑 msbuild 文件、执行大量手动柚木并告诉 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多