簡體   English   中英

NET 5 MsTest 在互操作測試中中止

[英]NET 5 MsTest Aborts on Interop tests

幾個小時以來,我一直在與 Interop 單元測試中的一個奇怪的 MsTest 問題作斗爭。 上下文是 Windows11、NET 5、VStudio 2019 和 2022,以及與 Office Apps Access 互操作、Excel、Word、Outlook 和 PowerPoint。

所有項目和測試 project.csproj 文件都設置為 TFM net5.0-windows7.0。 一些項目導入Microsoft.Office.Core ,所有項目導入各自的互操作庫,例如Microsoft.Office.Interop.Excel等。

問題是某些應用程序的測試工作正常,而對於其他應用程序,測試框架在單擊測試方法名稱旁邊的測試按鈕后立即中止(沒有我可以看到或找到的異常或錯誤消息)。

觀察到的東西:

  1. 測試框架在中止時將測試報告為不確定。 (我說“中止”,但測試只是立即完成且不確定,沒有崩潰或錯誤消息。我認為測試永遠不會運行。有時白色的小調試圓圈出現在斷點處,就好像調試器要很快就停在那里,但它永遠不會到達那里。)

  2. 有時(並非總是)單元測試 window 在using Microsoft.Office.Interop.Excel時以紅色顯示“互操作”,就好像它找不到 COM 程序集一樣。

  3. 有時(並非總是)單元測試代碼會在Excel.Applicationvar myrange = sheet.Range["A9","C9"]好像找不到定義。

  4. 例如,我嘗試在這個小測試的第 2 行和第 3 行設置調試斷點,但從未到達斷點。 測試框架會中止/跳過。

     [TestMethod] public void Simple() { var foo = 2; }
  5. 所有五個辦公應用程序都使用相同的項目文件內容和包(除了它們為 Excel、Office、Outlook 等導入自己的互操作庫之外)

  6. 該問題僅出現在三個應用程序上,並且由於某種原因在兩個應用程序上消失了。 我現在正在研究 Excel,這就是為什么我的示例適用於 Excel。 Word 測試項目很不穩定,有時會顯示問題,有時不會。 Outlook、Access 和 Powerpoint 的單元測試工作正常。 (如果他們以前展示過這個問題,它已經消失了。)

  7. 所有代碼、測試等都在 NET Framework 4.8 上完美運行了將近兩年。

  8. 我為這些 Office 項目獲得的唯一編譯警告(僅在 VS2019 上)類似於我的 Excel 項目中顯示的以下警告。 但它們似乎與我的代碼無關且遙遠。

特殊 VS2022 觀察

  1. VS2022 不顯示警告消息,但仍然存在中止問題。 它看起來像一個完全干凈的“構建成功”報告。

  2. 如上所述,VS2022 不會顯示紅色的“互操作”或“范圍”或“應用程序”無法識別的 object 消息。

  3. 然而 VS2022 仍然像 VS2019 一樣中止測試。

從我使用 VS2019 的 Excel 單元測試項目:

嚴重性代碼 描述 項目文件行抑制 State 警告 MSB3305 處理 COM 從路徑“C:\Program Files\Microsoft Office\Root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO”引用“Microsoft.Office.Core” 類型庫導入器遇到類型“Microsoft.Office.Core.SeriesGradientStopColorFormat”的屬性獲取器“Type”,但沒有有效的返回類型。 導入器將嘗試將此屬性作為方法導入。 HspoExcelTests C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets 2827

從我使用 VS2019 的 Excel 代碼項目:

嚴重性代碼 描述 項目文件行抑制 State 警告 MSB3305 處理 COM 從路徑“C:\Program Files\Microsoft Office\Root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO”引用“Microsoft.Office.Core” 類型庫導入器遇到類型“Microsoft.Office.Core.SeriesGradientStopColorFormat”的屬性獲取器“Type”,但沒有有效的返回類型。 導入器將嘗試將此屬性作為方法導入。 HspoExcel C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets 2827

從我使用 VS2019 的 Excel 代碼項目(它在一兩個地方調用 Word 互操作):

嚴重性代碼 描述 項目文件行抑制 State 警告 MSB3305 處理 COM 從路徑“C:\Program Files\Microsoft Office\Root\Office16\MSWORD.OLB”引用“Microsoft.Office.Interop.Word”。 類型庫導入程序在類型“Microsoft.Office.Interop.Word._Document”上遇到了一個屬性獲取器“Dummy1”,但沒有有效的返回類型。 導入器將嘗試將此屬性作為方法導入。 HspoExcel C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets 2827

Excel 測試項目的 my.csproj 文件示例:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net5.0-windows7.0</TargetFramework>
        <IsPackable>false</IsPackable>
    </PropertyGroup>

    <ItemGroup>
      <COMReference Include="Microsoft.Office.Core">
        <WrapperTool>tlbimp</WrapperTool>
        <VersionMinor>8</VersionMinor>
        <VersionMajor>2</VersionMajor>
        <Guid>2df8d04c-5bfa-101b-bde5-00aa0044de52</Guid>
        <Lcid>0</Lcid>
        <Isolated>false</Isolated>
        <EmbedInteropTypes>true</EmbedInteropTypes>
      </COMReference>
      <COMReference Include="Microsoft.Office.Interop.Excel">
        <WrapperTool>tlbimp</WrapperTool>
        <VersionMinor>9</VersionMinor>
        <VersionMajor>1</VersionMajor>
        <Guid>00020813-0000-0000-c000-000000000046</Guid>
        <Lcid>0</Lcid>
        <Isolated>false</Isolated>
        <EmbedInteropTypes>true</EmbedInteropTypes>
      </COMReference>
    </ItemGroup>

    <ItemGroup>
      <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
      <PackageReference Include="MSTest.TestAdapter" Version="2.2.8" />
      <PackageReference Include="MSTest.TestFramework" Version="2.2.8" />
    </ItemGroup>


    <ItemGroup>
      <ProjectReference Include="..\HspoExcel\HspoExcel.csproj" />
    </ItemGroup>

    <ItemGroup>
        <Reference Include="HsUtils">
            <HintPath>..\..\..\Holding\core.plt\HsUtils.dll</HintPath>
        </Reference>
        .. other normal libraries (2) that are referenced
    </ItemGroup>

</Project>

有誰知道發生了什么以及我可以做些什么來解決這個問題並在 NET 5 平台上獲得更高的可靠性?

經過更多小時的調查,結果發現問題出在 NET 5 項目的 Resharper 測試運行器上。 該問題適用於多種項目(互操作和非互操作)。

在所有情況下,Microsoft VS 測試資源管理器都可以 1) 顯示沒有紅色字樣的代碼,指示缺少 object 類型和 2) 正確運行測試代碼。

我的教訓是學會嘗試在下一次更快地切換測試運行器,而不是將大量時間浪費在可以通過使用不同的測試運行器輕松繞過的基礎設施問題上。 希望這個故事能夠為那些在 NET 5 和 Resharper 上遇到同樣問題的人節省一些時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM