我正在使用导航服务在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.
}
答案 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());
}