Xharness 与 xunit 在使用 Android 资产的单元测试中中断

问题描述 投票:0回答:1

下午好,

我有一个基于 xUnit 的 MAUI 单元测试应用程序(Android)。 该应用程序有“两个入口点”:测试仪器(无头)和视觉入口点(应用程序)。这大致基于这个 MAUI 源代码example。 从 Visual Studio(即视觉入口点)启动时,所有测试都可以正常运行(并通过)。 如果从 VisualStudio 启动时调用无头入口点,则所有测试都可以正常运行(并通过)。 该仪器与 xharness 一起使用。目标是在 CI 作业下使用它,以便它可以运行项目的单元测试。

当您在使用 xharness 启动时尝试使用 AssetManager 打开资产时,使用 Android 资产的测试都会失败。异常是空异常:

Object reference not set to an instance of an object

我还使用一些 TestFixtures (IClassFixture) 来实现类似的 nUnit 功能设置等,如here中所述。如果在这里完成对资产的访问,则异常会略有不同,但异常的堆栈最终显示与上面相同的内容:

Exception messages: System.AggregateException : AggregateException_ctor_DefaultMessage (Object reference not set to an instance of an object) (The following constructor parameters did not have matching fixture data: XXXX fixture)
System.NullReferenceException : Object reference not set to an instance of an object
The following constructor parameters did not have matching fixture data: TestColourClassificationFixture fixture   Exception stack traces: 
----- Inner Stack Trace #1 (System.NullReferenceException) -----

该项目通过 xharness 构建并运行:

dotnet build Android.Test.csproj -c Release -f net7.0-android
xharness android test --output-directory=test_results  --package-name=com.example.android.test --app=Android.Test/bin/Release/net7.0-android/com.example.android.test-Signed.apk --instrumentation=com.example.android.test.TestInstrumentation

我查过了:

  • apk 包含资产 - 确实如此。
  • 由于某种原因,资产管理器不为空 - 它不是。
  • 尝试禁用 xunit 测试运行时的并行性,并按顺序一一运行。这是基于我读到的一些关于并行化导致竞争条件的帖子——这不会改变任何东西,并且访问资产的测试仍然失败。

我在这里可能缺少什么?为什么 Visual Studio 可以正常启动并运行测试,但 xharness 却不能?这肯定与文件(资产)的访问有关,但我不确定是什么......

.net unit-testing xamarin.android maui xunit
1个回答
0
投票

如果有人因为某种原因遇到这个问题,我正在使用 AssetsManager,但由于某种原因这在我的情况下不起作用。

使用

Platform.AppContext.Assets

工作正常。

不确定它是否与 MAUI 模板应用程序有关,即使我只针对 .net-android。

© www.soinside.com 2019 - 2024. All rights reserved.