【问题标题】:MSTest.exe not copying all needed project DLLs?MSTest.exe 没有复制所有需要的项目 DLL?
【发布时间】:2011-12-26 09:03:32
【问题描述】:

我正在尝试运行 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 在引用和被引用项目之间匹配。

我在命令行中缺少什么吗?

【问题讨论】:

标签: command-line mstest


【解决方案1】:

【讨论】:

  • 我通常通过在单元测试 dll 的 AssemblyInit.cs 中创建一个方法来解决这个问题,在该方法中我明确地对那些需要它的 dll:s 进行虚拟调用(通常是插件类型 dll:s,因为它们没有从测试代码本身显式调用)。
  • 似乎这种行为在VS2019中仍然存在,我只是注意到如果应用任何[DeploymentItem],所有测试工作文件夹将是TestResult\Deployxxx\Out而不是UnitTest Project调试文件夹,如dll复制的行为,会因为缺少dll而导致测试用例失败。
【解决方案2】:

它是否进入 Out 或构建区域取决于不同的因素,但是,对于它仍然不起作用的情况,您可以使用 DeploymentItem “hack”,或者调整您的 runsettings 文件。

试试看这个答案:https://stackoverflow.com/a/33344573/2537017

【讨论】:

    【解决方案3】:

    您可以使用测试设置文件准确指定将哪些文件复制到测试目录。您可以在 Visual Studio 中创建多个测试设置文件,因此您可以有一个用于从 VS 运行,另一个用于从 MSTest 运行,另一个用于服务器 CI 构建,等等。更多信息请看这里:Create Test Settings to Run Automated Tests from Visual Studio

    使用/testsettings:&lt;filename&gt; 选项在命令行中指定它。

    一开始似乎让人迷惑的是,默认情况下,MSTest的“当前目录”并不是MSTest的启动目录,而是测试结果的Out文件夹。

    如前所述,MSTest 不会正确推断所有使用的程序集,如果您没有直接引用,它不会复制程序集。也就是说,Visual Studio 在其构建中也有类似的行为,所以很多人通过添加虚假代码引用来解决这个问题 - 这是一个糟糕的解决方案 - 我不推荐它。

    但是,本机 DLL 的问题更大,我发现在测试配置(测试设置)中显式复制它们对它们有效,就像对托管程序集一样。

    【讨论】:

    • 如何在测试设置中配置这些原生 DLL?
    猜你喜欢
    • 2020-06-28
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    相关资源
    最近更新 更多