Teamcity 和单元测试 Windows 应用商店

Teamcity and Unit Testing Windows Store apps

我一直在努力为我的 Visual Studio 解决方案编译 Teamcity 9 和 运行 单元测试。

我有一个 Windows Phone 8.1(WinRT,不是 silverlight)项目和一个 "MyProject.Common.dll" 可移植 class 库具有通用功能。

我创建了一个“Windows Phone Unit Test App”项目。如果我 运行 它来自 VS,它 运行 在模拟器上 运行 并且 运行 我的单元测试。一切正常。

如果我想运行从控制台进行单元测试,我使用这个命令:

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe MyProject.Tests_1.0.0.1_x86.appx /InIsolation /settings:RunOnEmu.runsettings"

有效。它启动模拟器,部署 appx 和 运行 单元测试。

现在是问题:使用 Teamcity 9,我使用相同的命令配置命令行构建步骤 运行ner,我收到此错误:

Error: Could not start test run for the tests for Windows Phone app: Unit tests for Windows Store apps cannot be run from a service or non interactive process. Please run unit tests from an interactive process..

有没有办法绕过这个错误?

为所需的从站更改 Jenkins 配置。在选项 "Launch Method" 中,现在可能是 "Let Jenkins control this slave as a windows service",但您需要 "JLNP"(Java 网络启动协议):

最后,我制作了一个自定义脚本来启动 vstest.console.exe 和 运行 单元测试应用程序,然后另一个构建步骤将测试结果加载到 TeamCity。

还有另一种绕过它的方法 - 运行 将代理构建为可执行文件而不是服务。您可以通过删除 TeamCity 服务来实现:

service.stop.bat
service.uninstall.bat

(所有 .bat 文件都在 TeamCity 构建代理的 bin 文件夹中)

然后创建新的 .bat 文件以将构建代理作为可执行文件启动:

C:\TeamCity\buildAgent\bin\agent.bat start

并将此文件的快捷方式放入 C:\Users\%user%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 的启动文件夹中,并按照 here 所述设置自动登录。这样构建代理将在重启后自动启动。

我找到了这个解决方案 here 以及一些关于 Windows 存储测试的其他常见问题和解决方案。