无法使用带 Prism 的 MSTest 设置 Xamarin Forms 单元测试
Can't set up Xamarin Forms Unit Test using MSTest with Prism
我有一个新的 Xamarin Forms (3.2) 项目,它使用 .NetStandard 库 (2.0.3) 和 Prism/Unity 用于导航和依赖项注入。我一直在努力设置基本的单元测试。
我的单元测试项目有一个单元测试 class 试图测试 ViewModel class (LoginPageViewModel) 中的方法。 ViewModel class 继承自 ViewModelBase,后者继承自 Prism 的 BindableBase 并实现了 Prism 的 INavigationAware 接口。
public class ViewModelBase : BindableBase, INavigationAware, IDestructible
我有两个构造函数。第二个我只是为单元测试创建的,因为我不需要 INavigationService 来进行测试。
public LoginPageViewModel(INavigationService navigationService, IdentityService identityService) : base(navigationService)
public LoginPageViewModel(IIdentityService identityService) : base()
项目已构建,但我的每个测试都遇到此异常:
Message: Test method
SalesOrderApp.UnitTests.LoginPageViewModelTests.UserLogin_LoginFails_ReturnsFalseAndNoToken
threw exception: System.TypeLoadException: Could not load type
'Prism.Navigation.INavigationAware' from assembly 'Prism,
Version=7.1.0.431, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59'.
我在 MSTest 项目中安装了与我正在测试的项目中相同的 Prism.Unity.Forms (7.1.0.431) 版本。我一直在努力让 MSTests 与 Prism 一起工作。非常感谢任何帮助。
没有复制品我只能在这里做假设。基于异常,它似乎无法解析导航接口。这告诉我您的单元测试项目针对的是完整的 .Net Framework (net45),这是唯一会导致该异常的情况。
您可以将您的单元测试重定向到我推荐的设备运行器(如果您使用的是 Xamarin),或者只是 netcore。
为了让未来的读者更清楚一些:
运行 进入同一问题,无法使用 MSTest 解决 Prism 的 INavigationService
。为了解决这个问题,我不得不手动编辑我们的单元测试 .csproj
以指向 .NETStandard
之前:
<HintPath>..\packages\Prism.Core.7.1.0.431\lib\net45\Prism.dll</HintPath>
之后
<HintPath>..\packages\Prism.Core.7.1.0.431\lib\netstandard2.0\Prism.dll</HintPath>
转瞬即逝!修复了
我有一个新的 Xamarin Forms (3.2) 项目,它使用 .NetStandard 库 (2.0.3) 和 Prism/Unity 用于导航和依赖项注入。我一直在努力设置基本的单元测试。
我的单元测试项目有一个单元测试 class 试图测试 ViewModel class (LoginPageViewModel) 中的方法。 ViewModel class 继承自 ViewModelBase,后者继承自 Prism 的 BindableBase 并实现了 Prism 的 INavigationAware 接口。
public class ViewModelBase : BindableBase, INavigationAware, IDestructible
我有两个构造函数。第二个我只是为单元测试创建的,因为我不需要 INavigationService 来进行测试。
public LoginPageViewModel(INavigationService navigationService, IdentityService identityService) : base(navigationService)
public LoginPageViewModel(IIdentityService identityService) : base()
项目已构建,但我的每个测试都遇到此异常:
Message: Test method SalesOrderApp.UnitTests.LoginPageViewModelTests.UserLogin_LoginFails_ReturnsFalseAndNoToken threw exception: System.TypeLoadException: Could not load type 'Prism.Navigation.INavigationAware' from assembly 'Prism, Version=7.1.0.431, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59'.
我在 MSTest 项目中安装了与我正在测试的项目中相同的 Prism.Unity.Forms (7.1.0.431) 版本。我一直在努力让 MSTests 与 Prism 一起工作。非常感谢任何帮助。
没有复制品我只能在这里做假设。基于异常,它似乎无法解析导航接口。这告诉我您的单元测试项目针对的是完整的 .Net Framework (net45),这是唯一会导致该异常的情况。
您可以将您的单元测试重定向到我推荐的设备运行器(如果您使用的是 Xamarin),或者只是 netcore。
为了让未来的读者更清楚一些:
运行 进入同一问题,无法使用 MSTest 解决 Prism 的 INavigationService
。为了解决这个问题,我不得不手动编辑我们的单元测试 .csproj
以指向 .NETStandard
之前:
<HintPath>..\packages\Prism.Core.7.1.0.431\lib\net45\Prism.dll</HintPath>
之后
<HintPath>..\packages\Prism.Core.7.1.0.431\lib\netstandard2.0\Prism.dll</HintPath>
转瞬即逝!修复了