【问题标题】:Why does my Unit Test work from Visual Studio 2010 and not with Jenkins?为什么我的单元测试可以在 Visual Studio 2010 中运行,而不能在 Jenkins 中运行?
【发布时间】:2012-03-18 18:54:44
【问题描述】:

我有一个与 Microsoft Excel 一起使用的单元测试,使用的是 Microsoft 的互操作程序集。在 Visual Studio 中执行单元测试时,一切正常,测试通过。当我使用 Jenkins 在同一台机器上运行相同的测试时,测试失败。

关于测试:基本上它只是创建一个新的 Excel 数据表,对其进行一些操作,然后将其保存到一个 Excel 文件中。我知道 interop 和 excel 有很多麻烦,但由于测试在 Visual Studio 中工作,这更多是与 Jenkins 的差异。该测试称为“Windows 批处理命令”,代码如下:

echo Executing Unit Tests...
del /f/q results.trx 
call "%MSTEST%\mstest.exe" /testcontainer:"%WORKSPACE%\xxx.Test\bin\Debug\xxx.Test.dll" /testsettings:Local.Testsettings /resultsfile:results.trx

有问题的行如下,它将 excel 工作簿保存到一个文件(尚不存在):

excelWorkbook.SaveAs(destFilePath, Excel.XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

收到的异常是:

System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x800A03EC

关于 Jenkins 的安装: 我安装 Jenkins 的机器(Windows 7)上也有完整的 Visual Studio 安装,用于比较,当然还有 Microsoft Office Excel .我预料到麻烦来自这样一个事实,即在使用 Jenkins 启动时,测试无法与桌面正确交互,as required by Excel according to Microsoft。 我已经通过以下方式配置了 Jenkins 服务,用于测试。

  • 标准方式,即服务
  • 作为服务,允许桌面交互
  • 作为管理员用户(与我使用 Visual Studio 时登录的用户相同)

这 3 种变体均无效。 编辑:通过malenkiy_scot,我了解到以登录用户身份显式启动它,它可以工作。因此,现在的问题是:上述任何变体与这种方式有什么区别?

有人把这个带到工作中吗?执行此测试时,Visual Studio 和 Jenkins 有什么区别?

感谢您的提示!

【问题讨论】:

  • 当您“显式”运行 Jenkins 而不是作为服务运行时会发生什么?
  • @malenkiy_scot,好点,我会试试的!
  • @malenkiy_scot,它奏效了。但是,在普通用户帐户下运行 jenkins 感觉有些令人不安。我担心这会以某种方式咬我。
  • 大约一年前我在 PhotoShop 测试中遇到过类似的问题。我最终创建了一个 Jenkins 从站,它作为专门用于这些测试的“普通”用户在前台运行。

标签: .net visual-studio-2010 unit-testing jenkins mstest


【解决方案1】:

正如我在评论中所指出的,您可以创建一个从属实例(即使在同一台机器上),它将作为普通用户在前台运行。将不会在服务实例中运行的作业绑定到该从属服务器。

【讨论】:

  • 我会接受,因为它肯定会有所帮助。然而,我目前使用的解决方案是,我在交互式登录用户下运行整个 Jenkins。感觉不好,但有效。
【解决方案2】:

再次检查运行 Jenkins 的用户帐户是否能够与桌面交互。

即,运行 services.msc,选择您的 Jenkins 服务,调出属性,切换到“登录”选项卡并确认已选中“允许服务与桌面交互”框。

通常,如果在测试中的某些内容运行时弹出任何类型的对话框(即使它不需要任何类型的输入),您会想要执行此操作。

【讨论】:

  • 嗨,彼得,感谢您的提示,但我已经尝试过了。 (并在问题中如此说明)
猜你喜欢
  • 2016-12-02
  • 2011-07-03
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
相关资源
最近更新 更多