我正在尝试运行MSTest.exe,而且似乎没有正确读取testcontainer;我的测试都在Visual Studio中的所有配置环境中成功运行。
我正在使用的命令是:
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe" /nologo /usestderr /testSettings:"C:\temp\MyProject\Sources\MyProject\Local.testsettings" /searchpathroot:"C:\temp\MyProject\Binaries" /resultsfileroot:"C:\temp\MyProject\TestResults" /testcontainer:"C:\temp\MyProject\Binaries\MyProject.Services.Server.UnitTests.dll"
testcontainer项目中的项目引用如下所示:
<ItemGroup>
<ProjectReference Include="..\..\Services\MyProject.Services.Server\MyProject.Services.Server.csproj">
<Project>{92EC1999-CC0C-47DD-A4D6-17C3B1233C50}</Project>
<Name>MyProject.Services.Server</Name>
</ProjectReference>
<ProjectReference Include="..\..\SvcConfiguration\MyProject.ServiceConfiguration.Interfaces\MyProject.ServiceConfiguration.Interfaces.csproj">
<Project>{8E2E7BA9-75DB-458E-A184-AC1030EAD581}</Project>
<Name>MyProject.ServiceConfiguration.Interfaces</Name>
</ProjectReference>
<ProjectReference Include="..\..\SvcConfiguration\MyProject.ServiceConfiguration.Services\MyProject.ServiceConfiguration.Services.csproj">
<Project>{39514766-23A8-45DB-96EA-B6B4D9C8B086}</Project>
<Name>MyProject.ServiceConfiguration.Services</Name>
</ProjectReference>
</ItemGroup>
ServiceConfiguration.Interfaces和ServiceConfiguration.Services DLL都没有放入TestResults的Out文件夹中。
项目GUID在引用和引用的项目之间匹配。
命令行中是否存在我遗漏的内容?
答案 0 :(得分:5)
mstest.exe不会删除所有引用的dll。
上查看有关此内容的博客文章答案 1 :(得分:4)
您可以使用测试设置文件准确指定要复制到测试目录的文件。您可以在Visual Studio中创建多个测试设置文件,因此您可以使用一个用于从VS运行,另一个用于从MSTest运行,另一个用于服务器CI构建,依此类推。有关详细信息,请参阅此处:Create Test Settings to Run Automated Tests from Visual Studio
使用/testsettings:<filename>
选项在命令行中指定它。
一开始似乎让人困惑的是,默认情况下,MSTest&#34;当前目录&#34;不是MSTest启动目录,而是测试结果的Out文件夹。
如前所述,MSTest未正确推断所有已使用的程序集,如果您没有直接引用,则不会复制程序集。也就是说,Visual Studio在构建过程中也有类似的行为,所以很多人通过添加伪造的代码引用来解决这个问题 - 这是一个糟糕的解决方案 - 我不推荐它。
但是,本机DLL甚至更成问题,我发现在测试配置中显式复制它们(测试设置)对它们起作用,就像托管程序集一样。
答案 2 :(得分:1)
无论是Out还是构建区域取决于不同的因素,但是,对于仍然无效的情况,您可以使用DeploymentItem“hack”,或者调整您的runsettings文件。