我有一个新的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>
普雷斯托·已修复