我需要知道如何告诉MSTEST在解决方案文件中运行所有测试项目。这需要从命令行完成。现在我必须通过一个特定的项目文件,我试图让它从一个SOLUTION文件运行。
我希望这是可能的,因为在Visual Studio中,按Ctrl R,A,在当前打开的解决方案中运行所有测试。
我想从我的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>
要详细说明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>
此外,将MsBuild与CruiseControl集成是一块蛋糕。
编辑
以下是您可以从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>