【发布时间】: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