运行 通用 Windows 从命令行进行单元测试

Running Universal Windows unit tests from the command line

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

我正在使用 MSTestFramework。

简答:

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

长答案:

  1. 通过选择通用/单元测试应用程序(通用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 文件,并按照导入向导的默认步骤操作,但要更改两件事:

    • 将存储位置设置为本地计算机:
    • 将证书放入受信任的根证书颁发机构存储:
    • 完成向导应该说 "The import was successful."
  5. 尝试 运行ning vstest.console.exe 使用简短答案中的参数,现在它应该 运行 你所有的测试。

跟着@Marinov,UWP目前不支持测试App。只有 Library 可以测试。

所以,如果你想在UWP中做单元测试,你必须把你的逻辑代码从App项目中拉出来,然后把它们注入到新创建的库项目中。测试工程和原app工程以后可以参考

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

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

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

  2. 运行 MSBuild.exe 你的解决方案。

>"C:\Program Files (x86)\MSBuild.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\bin\x86\certmgr.exe" -add Win10-UnitTests_1.1.0.0_x86_Release.cer -s -r localmachine root

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

>"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

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

如果 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