【问题标题】:Can't set up Xamarin Forms Unit Test using MSTest with Prism无法使用带有 Prism 的 MSTest 设置 Xamarin Forms 单元测试
【发布时间】:2019-03-24 20:33:15
【问题描述】:

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

我的单元测试项目有一个单元测试类,它试图测试 ViewModel 类 (LoginPageViewModel) 中的方法。 ViewModel 类继承自 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 一起工作。任何帮助将不胜感激。

【问题讨论】:

    标签: unit-testing xamarin.forms prism mstest


    【解决方案1】:

    没有复制我只能在这里做假设。根据异常,它似乎无法解析导航界面。这告诉我您的单元测试项目的目标是完整的 .Net Framework (net45),这是唯一会导致该异常的场景。

    如果您正在使用 Xamarin,您可以将您的单元测试重新定位到我推荐的设备运行程序,或者只是 netcore。

    【讨论】:

    • 谢谢丹。你是对的。我正在测试我的 .Net Standard 2.0 项目,而我的单元测试项目的目标是 .Net Framework 4.7.2。我试图通过将单元测试重新定位到设备运行器来理解您的意思。你能给我指点这方面的信息吗?
    • @Steve 可能最简单的事情就是重新定位到netcoreapp2.1。更高级但更好,因为您可以发现特定于平台的问题是使用设备运行程序,它本身就是运行测试的 Xamarin iOS/Android 项目。既然您说您使用的是 MSTest,您需要查看 MSTestX,这是一个 OSS 端口,可以直接在 iOS/Android 上运行 MSTest 项目。
    【解决方案2】:

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

    遇到了同样的问题,无法使用 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>
    

    转瞬即逝!修好了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-13
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      相关资源
      最近更新 更多