Xamarin.mac 单元测试项目
Xamarin.mac unit test project
我正在尝试为 Xamarin Mac Class 库项目创建单元测试项目。
.NET NUnit 库项目它不起作用,因为我无法添加对我的 Xamarin Mac Class 库的引用,所以我尝试创建一个新的 Xamarin Mac Class 库项目并向其中添加了 NUnit Nuget 包。
<package id="NUnit" version="3.5.0" targetFramework="xamarinmac20" />
第一部分成功了,因为测试在测试管理器中可见,但不幸的是,每次我尝试 运行 单元测试时,我都会收到 "Load failed"。
出现一个或多个错误。
Stack trace:
at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00014] in /private/tmp/source-mono-4.6.0-c8sr0/bockbuild-mono-4.6.0-branch-c8sr0/profiles/mono-mac-xamarin/build-root/mono-x86/mcs/class/referencesource/mscorlib/system/threading/Tasks/Task.cs:2157
at System.Threading.Tasks.Task`1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x00034] in /private/tmp/source-mono-4.6.0-c8sr0/bockbuild-mono-4.6.0-branch-c8sr0/profiles/mono-mac-xamarin/build-root/mono-x86/mcs/class/referencesource/mscorlib/system/threading/Tasks/Future.cs:562
at System.Threading.Tasks.Task`1[TResult].get_Result () [0x00000] in /private/tmp/source-mono-4.6.0-c8sr0/bockbuild-mono-4.6.0-branch-c8sr0/profiles/mono-mac-xamarin/build-root/mono-x86/mcs/class/referencesource/mscorlib/system/threading/Tasks/Future.cs:532
at MonoDevelop.UnitTesting.NUnit.NUnitAssemblyTestSuite.RunUnitTest (MonoDevelop.UnitTesting.UnitTest test, System.String suiteName, System.String pathName, System.String testName, MonoDevelop.UnitTesting.TestContext testContext) [0x0014a] in /Users/builder/data/lanes/3816/fa52f026/source/monodevelop/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitAssemblyTestSuite.cs:424
Xamarin.Mac 需要大量的手来将本机支持库放在正确的位置/加载所有内容,然后确保您只调用 NSApplication.Init 一次,无论测试次数如何,等等。
让 nunit 做到这一点并非易事。我建议尝试 https://github.com/mono/guiunit.
guiunit有两种使用方式:
- 将程序集与 guiunit 打包在一起的传统方式 运行 它们:https://developer.xamarin.com/samples/mac/guiunit-example/
- 创建 XM 应用程序并直接包含 guiunit 的不太标准的方法:https://github.com/xamarin/xamarin-macios/blob/master/tests/common/mac/MacTestMain.cs#L16
传统方式更容易集成到现有的 nunit 工作流中,而较新的不太标准的方式更容易调试。
我 运行 遇到了同样的问题,最终将 class 库的目标框架从 Xamarin.Mac 移动框架 更改为 Xamarin.Mac.NET 4.5 框架。
我不知道这是否适合您。
我正在尝试为 Xamarin Mac Class 库项目创建单元测试项目。
.NET NUnit 库项目它不起作用,因为我无法添加对我的 Xamarin Mac Class 库的引用,所以我尝试创建一个新的 Xamarin Mac Class 库项目并向其中添加了 NUnit Nuget 包。
<package id="NUnit" version="3.5.0" targetFramework="xamarinmac20" />
第一部分成功了,因为测试在测试管理器中可见,但不幸的是,每次我尝试 运行 单元测试时,我都会收到 "Load failed"。
出现一个或多个错误。
Stack trace:
at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00014] in /private/tmp/source-mono-4.6.0-c8sr0/bockbuild-mono-4.6.0-branch-c8sr0/profiles/mono-mac-xamarin/build-root/mono-x86/mcs/class/referencesource/mscorlib/system/threading/Tasks/Task.cs:2157
at System.Threading.Tasks.Task`1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x00034] in /private/tmp/source-mono-4.6.0-c8sr0/bockbuild-mono-4.6.0-branch-c8sr0/profiles/mono-mac-xamarin/build-root/mono-x86/mcs/class/referencesource/mscorlib/system/threading/Tasks/Future.cs:562
at System.Threading.Tasks.Task`1[TResult].get_Result () [0x00000] in /private/tmp/source-mono-4.6.0-c8sr0/bockbuild-mono-4.6.0-branch-c8sr0/profiles/mono-mac-xamarin/build-root/mono-x86/mcs/class/referencesource/mscorlib/system/threading/Tasks/Future.cs:532
at MonoDevelop.UnitTesting.NUnit.NUnitAssemblyTestSuite.RunUnitTest (MonoDevelop.UnitTesting.UnitTest test, System.String suiteName, System.String pathName, System.String testName, MonoDevelop.UnitTesting.TestContext testContext) [0x0014a] in /Users/builder/data/lanes/3816/fa52f026/source/monodevelop/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitAssemblyTestSuite.cs:424
Xamarin.Mac 需要大量的手来将本机支持库放在正确的位置/加载所有内容,然后确保您只调用 NSApplication.Init 一次,无论测试次数如何,等等。
让 nunit 做到这一点并非易事。我建议尝试 https://github.com/mono/guiunit.
guiunit有两种使用方式:
- 将程序集与 guiunit 打包在一起的传统方式 运行 它们:https://developer.xamarin.com/samples/mac/guiunit-example/
- 创建 XM 应用程序并直接包含 guiunit 的不太标准的方法:https://github.com/xamarin/xamarin-macios/blob/master/tests/common/mac/MacTestMain.cs#L16
传统方式更容易集成到现有的 nunit 工作流中,而较新的不太标准的方式更容易调试。
我 运行 遇到了同样的问题,最终将 class 库的目标框架从 Xamarin.Mac 移动框架 更改为 Xamarin.Mac.NET 4.5 框架。
我不知道这是否适合您。