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 单元测试在开发机器上通过但在构建机器上失败的主要内容,如果未能解决你的问题,请参考以下文章
“没有这样的模块:AVFAudio”xcode 构建在旧机器上失败,但在新机器上工作正常