我有一个新的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 引发异常:System.TypeLoadException:无法加载类型 程序集“ Prism”中的“ Prism.Navigation.INavigationAware”, 版本= 7.1.0.431,文化=中性,PublicKeyToken = 40ee6c3a2184dc59'。
我在MSTest项目中安装的Prism.Unity.Forms(7.1.0.431)版本与我正在测试的项目中的版本相同。我一直在努力让MSTests与Prism一起使用。任何帮助将不胜感激。
答案 0 :(得分:0)
没有复制品,我只能在这里进行假设。根据例外情况,似乎无法解析导航界面。这告诉我,您的单元测试项目针对的是完整的.Net Framework(net45),这是唯一会导致该异常的方案。
您可以将单元测试的目标重新定向到设备运行器(如果您使用的是Xamarin,我建议这样做),也可以只是netcore。
答案 1 :(得分:0)
为了使将来的读者更加清楚:
遇到同样的问题,无法使用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>
Presto changeo!修正