代码之家  ›  专栏  ›  技术社区  ›  MatthewMartin muthu

如何从“解决方案”项目调用项目中的A单元测试目标

  •  0
  • MatthewMartin muthu  · 技术社区  · 15 年前

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

    我知道我可以修改单个项目并告诉他们总是运行单元测试。我 不要 希望在Visual Studio中单击“构建”时运行单元测试,但我 希望在TeamCity启动MSBuild任务时运行单元测试。

    我尝试了“msbuild solutionname.sln”,并给了team city“build”的目标和“test”的自定义build标签。但是,当针对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>
    

    努尼特目标看起来像这样:

      <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,否则我将把所有测试目标都放到“解决方案项目”中。

    我有什么建议可以让这个工作吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   TrueWill    15 年前

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

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

        2
  •  0
  •   MatthewMartin muthu    15 年前

    这才是最终奏效的。它被Visual Studio忽略,msbuild将正确运行此部分,而team city也将正确运行此部分,尽管它用自己的运行时替换了目标(根据生成日志)。

    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>