无法使用带有棱镜的MSTest设置Xamarin表单单元测试

时间:2018-10-19 23:19:20

标签: unit-testing xamarin.forms prism mstest

我有一个新的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一起使用。任何帮助将不胜感激。

2 个答案:

答案 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!修正