【问题标题】:Running Universal Windows unit tests from the command line从命令行运行通用 Windows 单元测试
【发布时间】:2016-02-19 16:31:57
【问题描述】:

如何从命令行运行通用 Windows (UWP) 单元测试项目?

我正在使用 MSTestFramework。

【问题讨论】:

    标签: unit-testing mstest uwp


    【解决方案1】:

    简答:

    vstest.console.exe /Platform:x64 AppPackages\UnitTestProject1_1.0.0.0_x64_Debug_Test\UnitTestProject1_1.0.0.0_x64_Debug.appx
    

    长答案:

    1. 通过选择 Universal / Unit Test App (Universal Windows) 模板创建项目:

    2. 在解决方案文件所在的文件夹中使用命令行构建它

      msbuild /p:Platform=x64;Configuration=Debug

    3. 尝试在简短的回答中运行上面的vstest.console.exe 命令。它将失败,并给出以下错误消息:

      error 0x800B0109: The root certificate of the signature in the app package or bundle must be trusted..
      For more details look into Event Viewer under Applications and Services Logs -> Microsoft -> Windows -> AppXDeployment-Server -> Microsoft-Windows-AppXDeploymentServer/Operational.
      
    4. 为了能够从命令行运行测试,您需要使用具有受信任根的证书,或者使由 Visual Studio 生成的证书受信任。对于后者,在 Windows 资源管理器中双击 UnitTestProject1_TemporaryKey.pfx 文件,然后按照导入向导的默认步骤进行操作,但要更改两件事:

      • 将存储位置设置为本地计算机:
      • 将证书放置到受信任的根证书颁发机构存储:
      • 完成向导后应显示“导入成功。”
    5. 尝试使用简短答案中的参数运行vstest.console.exe,现在它应该运行所有测试。

    【讨论】:

    • 非常有用的解决方案。这为我节省了很多时间,谢谢!
    【解决方案2】:

    继@Marinov之后,UWP目前不支持测试App。只有 Library 可以测试。

    因此,如果您想在 UWP 中进行单元测试,您必须将您的逻辑代码从 App 项目中提取出来,并将它们倒入新创建的库项目中。以后可以参考测试项目和原应用项目。

    【讨论】:

      【解决方案3】:

      我遵循了 Ivan Marinov 的回答,但我需要一个纯命令行解决方案。一旦你的 UWP 单元测试项目正常工作并准备好自动化,请按照以下步骤操作:

      (我将我的解决方案命名为 Win10Universal,并将我的单元测试项目命名为 Win10-UnitTests。您需要将示例中的名称替换为您自己的名称)

      1. 以管理员身份打开命令提示符并导航到与您的解决方案相同的目录。

      2. 在您的解决方案上运行 MSBuild.exe。

      >"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" Win10Universal.sln /p:Platform=x86;Configuration=Release

      1. 构建过程将生成一个类似于 {SolutionDirectory}/AppPackages/{UnitTestTargetProjectName}/{Something_Test} 的目录。导航到此目录,您将在其中看到一个 .cer 安全证书。

      >cd AppPackages/Win10-UnitTests/Win10-UnitTests_1.1.0.0._x86_Test

      1. 在这个生成的证书上运行CertMgr.exe。如果您没有以管理员权限运行命令提示符,此步骤将失败。

      >"C:\Program Files (x86)\Windows Kits\10\bin\x86\certmgr.exe" -add Win10-UnitTests_1.1.0.0_x86_Release.cer -s -r localmachine root

      1. 在此目录中的 .appx 文件上运行 VSTest.Console.exe

      >"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" Win10-UnitTests_1.1.0.0_x86_Release.appx /Platform:x86

      如果您做对了所有事情,您应该会在窗口中看到您的单元测试!希望这会有所帮助!

      【讨论】:

      • 太棒了。为我工作。这确实应该是公认的答案,因为问题是关于从命令行运行测试。
      【解决方案4】:

      如果 Ivan Marinov 和 Kylaa 的答案都不适合您(就像不幸发生在我身上一样),请尝试使用 UWP 测试应用的 appxrecipe 作为目标文件,而不是 appx 本身。

      例如:

      vstest.console.exe testProject.build.appxrecipe /platform:x64
      

      https://github.com/Microsoft/vstest/issues/1393

      https://github.com/Microsoft/vstest/issues/1477

      【讨论】:

      • 这应该是推荐的答案,因为这不需要任何签名即可运行测试。
      猜你喜欢
      • 2011-03-18
      • 2014-03-20
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多