模拟并测试MvvmCross NavigationService

时间:2017-12-18 13:30:59

标签: xamarin mvvmcross

我正在使用导航服务在ViewModel之间执行导航,现在我必须为我的ViewModel创建一些单元测试。我能够使用Moq模拟ViewModel创建注入的对象,但我正在努力模拟NavigationService,然后创建断言,而不是导航到下一个ViewModel。

我在几年前找到了一些文档,因此导航服务不存在,我在官方的MvvmCross文档中找不到任何关于此事的内容,所以现在我处于死胡同。

我使用的是MvvmCross 5.5.0。

[Test]
public void CheckStatus()
{
    Mock<IStatusService> _mockStatusService = new Mock<IStatusService>();
    _mockStatusService.Setup(x => x.Check(It.IsAny<StatusRequest>())).Returns(() => new StatusRequest { Ok = true });

    //Here I need to pass the NavigationService to the constructor
    var _viewModel = new StatusViewModel(_mockStatusService.Object, navigationService);
    _viewModel.Start();

    //Here I guess I should perform the navigation assertion.
}     

1 个答案:

答案 0 :(得分:0)

我找到了如何模拟和测试NavigationService。我在这里发布解决方案,因为它对其他人有用。

[Test]
public void CheckStatus()
{
    IFixture _fixture = new Fixture().Customize(new AutoMoqCustomization());
    Mock<IMvxNavigationService> _navigationService = _fixture.Freeze<Mock<IMvxNavigationService>>();

    var _viewModel = new StatusViewModel(navigationService);
    _viewModel.Start();

    _navigationService.Verify(x => x.Navigate<NextViewModel>(null), Times.Once());
}