我如何告诉MSTEST运行在一个解决方案中所有测试项目?(How do I tell MSTEST

2019-07-30 08:38发布

我需要知道如何告诉MSTEST到溶液中的文件中运行所有测试项目。 这需要通过命令行来完成。 现在,我要传递一个特定的项目文件,我试图把它从一个解决方案文件运行。

我希望这是可能的,因为在Visual Studio中,按Ctrl + R,A,运行在当前打开的解决方案的所有测试。

我interpretted的帮助文件的方式,你必须在每个DLL传递明确。

我想从从我CruiseControl.NET服务器的命令行中运行这个,所以我可以写其他工具来实现这一目标。 如果没有得到这个通过其他方法发生的一个奇怪的方式,让我知道。

我如何告诉MSTEST运行一个解决方案的所有测试项目?

<exec>
    <!--MSTEST seems to want me to specify the projects to test -->
    <!--I should be able to tell it a SOLUTION to test!-->
    <executable>mstest.exe</executable>
    <baseDirectory>C:\projects\mysolution\</baseDirectory>
    <buildArgs>/testcontainer:testproject1\bin\release\TestProject1.dll 
    /runconfig:localtestrun.Testrunconfig 
    /resultsfile:C:\Results\testproject1.results.trx</buildArgs>
    <buildTimeoutSeconds>600</buildTimeoutSeconds>
</exec>

Answer 1:

为了阐述VladV的答案,使事情更加具体,运行测试,可以很容易地与自动化建议的命名惯例以下的MSBuild 。 从我的当前项目的MSBuild的文件下面的代码片段做了你问什么。

<Target Name="GetTestAssemblies">
    <CreateItem
        Include="$(WorkingDir)\unittest\**\bin\$(Configuration)\**\*Test*.dll"
        AdditionalMetadata="TestContainerPrefix=/testcontainer:">
       <Output
           TaskParameter="Include"
           ItemName="TestAssemblies"/>
    </CreateItem>
</Target>
<!-- Unit Test -->
<Target Name="Test" DependsOnTargets="GetTestAssemblies">
    <Message Text="Normal Test"/>
<Exec 
    WorkingDirectory="$(WorkingDir)\unittest"
    Command="MsTest.exe @(TestAssemblies->'%(TestContainerPrefix)%(FullPath)',' ') /noisolation /resultsfile:$(MSTestResultsFile)"/>
    <Message Text="Normal Test Done"/>
</Target>

此外使用CruiseControl集成的MSBuild是一块蛋糕。

编辑
下面是你可以从你的ccnet.config“叫”的MSBuild。

首先,如果你还没有使用的MSBuild为您构建自动化周围添加前面介绍的片段以下XML:

<Project DefaultTargets="Build"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    ..... <insert snippet here> .....
</Project>

在如保存此RunTests.proj旁边源代码树的解决方案。 现在,你可以修改的位ccnet.config以上为以下内容:

<msbuild>
  <executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>
  <workingDirectory>C:\projects\mysolution\</workingDirectory>
  <baseDirectory>C:\projects\mysolution\</baseDirectory>  
  <projectFile>RunTests.proj</projectFile>
  <targets>Test</targets>
  <timeout>600</timeout>
  <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>


Answer 2:

这是一个古老的线程,但我一直在挣扎了同样的问题,我意识到,你真的可以只在整个解决方案中每个DLL运行MSTest的,它并没有真正引起任何问题。 MSTest的是寻找标有[TestMethod的]属性的组件的方法,并没有被“测试”组件是不会有装饰与属性的任何方法组件。 所以,你得到一个“没有测试来执行。” 消息回来,没有做伤害。

因此,例如在南特,你可以这样做:

<target name="default">
    <foreach item="File" property="filename">
        <in>
            <items>
                <include name="**\bin\Release\*.dll" />
            </items>
        </in>
        <do>
            <echo message="${filename}" />
            <exec program="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe">
                <arg value="/testcontainer: ${filename}" />
                <arg value="/nologo" />
            </exec>
        </do>
    </foreach>
</target>

它将运行在溶液中的每一个Bin \ Release文件每个DLL中的所有测试方法。 那些不考的dll会返回一个“没有测试来执行。” 而那些有测试将测试运行。 我还没有想出尚未的唯一部分是(在恶性)执行停止第一次命令返回一个非零值。 因此,如果任何单元测试失败,它不会继续下去,在随后的组件来执行任何测试。 这不是很大,但如果所有的测试都通过了,那么他们将所有的运行。



Answer 3:

我只是最近解决这个问题。 这里是我的建议:MSTEST的使用testmetadata + testlist选项

  1. 首先,你应该创造testmetadata文件testlist(vsmdi)
  2. 命令行应该mstest /testmetadata:....vsmdi /testlist:<name>
  3. 然后使用CCNET配置运行MSTEST


Answer 4:

我知道这个线程是很老,但它仍然高在谷歌,所以我想我可能会帮助一个或两个。 总之,由于对此没有满意的解决方案。 我写了一个MSBuild任务这一点。 详细信息可以在这里找到: http://imistaken.blogspot.com/2010/08/running-all-tests-in-solution.html



Answer 5:

你可以强制执行的测试项目的命名和定位的一些约定,那么你可以,比如说您的解决方案的位置下方运行MSTest的,所有的* Test.dll的。

据我所知,目前还没有办法从一个“正常”的DLL项目基于解决方案文件soleley告诉一个测试项目。 因此,另一种可能是分析项目文件和/或.vsmdi文件找到测试项目,但可能是相当棘手。



Answer 6:

我不知道直接,但这正是VSMDI [FX:吐奶在一个角落里]可以提供帮助。 在解决方案中添加的所有测试的VSMDI。 然后通过VSMDI使用/ testmetadata到MSTest的。

不过我建议你按照上面的约定。 而且使用的命名惯例,并转储出使用说在命令脚本循环的SLN文件



Answer 7:

我只想编写调用它,你想要的方式一个目标,然后掀起调用包含所有DLL的被测试对象的批处理文件。

除非你加入测试项目的时候,你会很少需要对其进行修改。



Answer 8:

为什么不只是有MSBuild的输出所有的测试组件到一个文件夹。

尝试在设定的MSBuild OutputPath,OutputDir,OUTDIR属性来实现这一点。

再有MSTEST执行针对该文件夹中的所有组件。



文章来源: How do I tell MSTEST to run all test projects in a Solution?