TFS 单元测试在开发机器上通过但在构建机器上失败

Posted

技术标签:

【中文标题】TFS 单元测试在开发机器上通过但在构建机器上失败【英文标题】:TFS unit tests passing on developer machine but failing on build machine 【发布时间】:2012-12-13 23:42:09 【问题描述】:

我有一些单元测试在开发人员机器上通过,但在 TFS 构建机器上失败。这些测试因不同的原因而失败。我对构建机器的访问权限非常有限。但我可以查看放置文件夹并查看部署了哪些 DLL 文件等。

我还看到 pdb 文件已部署在构建机器上。

有什么方法可以调试并逐步了解为什么它只在构建机器上失败?

【问题讨论】:

测试结果文件 .trx 显示什么?它应该有一些可以提供帮助的信息? 但是有更多的诊断代码并检查日志。测试输出(解决方案目录中的测试结果文件夹)应该为您提供堆栈跟踪。此外,如果您的测试没有提供有用的错误,那么您要么出现严重故障,要么您的测试/代码写得不好(或两者兼而有之)。 您可能被否决了,因为这不是问题。查看远程调试。 请取消反对票。这是一个很好的合法问题。 我不会进行远程调试,因为它有点麻烦。单元测试应该在你已经知道的任何电脑上运行。所以我会调整 nunit / mstest 输出并逐个通过失败的测试。他们在明显的事情上失败了。也许你可以发布 1 个测试? Ps 给了你一个 +1 【参考方案1】:

有什么方法可以调试和单步调试代码,说明为什么它只 构建机器失败?

是的,您可以附加到构建机器上的进程...但是您必须登录到构建机器并在服务器上运行一个 VS 实例并具有附加到线程的管理员权限...

如果管理员愿意打开服务器进行远程调试,您也可以这样做。但是,由于这会带来更多的安全风险,而不仅仅是让您访问服务器,因此该选项也不可能是可行的。

所以对你来说不是。您将需要查看失败是什么,并找出导致这种情况发生的原因。然后你可以尝试修复它。

【讨论】:

为方便起见,请考虑将以下代码添加到您的单元测试中: System.Diagnostics.Debugger.Launch();然后RDP进入服务器,它会提示你调试!这比尝试设置远程调试或恰到好处地附加到 QAgent 容易得多 @ProVega - 我不确定它会起作用,但假设它会起作用,我会将其扩展为一个答案,并包括它是如何工作的一个小步骤。我会包括您在服务器上需要的权限。【参考方案2】:

尝试使用批处理文件运行msbuild,然后您可以在控制台中查看整个过程的进度。这里是一些你的入门代码:

ECHO Starting Build 
:: Change to MSBuild Directory
CD C:\Windows\Microsoft.NET\Framework\v4.0.30319
PAUSE
:: READY TO RUN?
ECHO READY TO RUN...
MSBuild.exe "C:\Users\PATH TO YOUR PROJECT HERE\.csproj" /t:MsDeployPublish /p:MsDeployServiceUrl=https://DOMAINHERE.com:8172/msdeploy.axd;DeployIisAppPath="IIS SITE NAME HERE";username=USERNAME;password=PASSWORD;AllowUntrustedCertificate=True;Configuration=Release
:: Outputs tons of network information into the command prompt
ECHO All done.
PAUSE 

无论哪里有大写替换为您的设置.... 保存 .bat 文件,双击,您可以在控制台中跟踪所有内容。

【讨论】:

问题是单元测试失败而不是构建解决方案。使用 MSTEST.exe 而不是 MSBUILD.EXE 的示例会更容易接受

以上是关于TFS 单元测试在开发机器上通过但在构建机器上失败的主要内容,如果未能解决你的问题,请参考以下文章

从 tfs 调用服务结构包命令失败

“没有这样的模块:AVFAudio”xcode 构建在旧机器上失败,但在新机器上工作正常

Pyinstaller 一切都在本地机器上运行,但在另一台机器上失败

CodedUI 测试因缺少程序集引用而失败?

NUnit3 测试不在 TFS 构建上运行

构建失败并在 TFS 中出现 COMPILETODALVIK 错误,但它在我的本地计算机中正确构建