无法使用 MSTest 和棱镜设置 Xamarin 窗体单元测试



我有一个新的Xamarin Forms (3.2(项目使用.NetStandard库(2.0.3(和Prism/Unity用于导航和依赖注入。我一直在努力设置基本的单元测试。

我的单元测试项目有一个单元测试类,该类尝试测试 ViewModel 类 (LoginPageViewModel( 中的方法。ViewModel 类继承自 ViewModelBase,该 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()

项目生成,但我的每个测试都出现以下异常:

消息:测试方法 SalesOrderApp.UnitTests.LoginPageViewModelTests.UserLogin_LoginFails_ReturnsFalseAndNoToken 引发异常:系统类型加载异常:无法加载类型 "棱镜.导航.INavigationAware"来自汇编"棱镜, 版本=7.1.0.431,区域性=中性,公钥令牌=40ee6c3a2184dc59'。

我在 MSTest 项目中安装了与我正在测试的项目相同的 Prism.Unity.Forms (7.1.0.431( 版本。我一直在努力让 MSTests 与 Prism 合作。任何帮助将不胜感激。

没有复制品,我只能在这里做出假设。根据异常,它似乎无法解析导航接口。这告诉我您的单元测试项目面向完整的 .Net Framework (net45(,这是导致该异常的唯一情况。

您可以将单元测试重定向到设备运行程序(如果您使用的是 Xamarin,我建议使用(,或者只是 netcore。

为了让未来的读者更清楚一点:

遇到同样的问题,无法使用MSTest解决棱镜的INavigationService。为了解决这个问题,我必须手动编辑单元测试的.csproj以指向.网络斯坦达德

以前:

<HintPath>..packagesPrism.Core.7.1.0.431libnet45Prism.dll</HintPath>

<HintPath>..packagesPrism.Core.7.1.0.431libnetstandard2.0Prism.dll</HintPath>

普雷斯托·已修复

最新更新