如何在Prism中为单元测试导航设置ServiceLocationProvider
本文关键字:单元测试 导航 设置 ServiceLocationProvider Prism | 更新日期: 2023-09-27 18:06:36
我正在研究的一个Prism/Unity应用程序有一个视图,负责实现RegionNavigationJournal
的GoBack()
和GoForward()
方法。这将是我第一次需要对使用RegionManager的任何东西进行单元测试,并且我遇到了一个错误,建议
ServiceLocationProvider必须设置
当我试图定位其导航被控制的区域时(这是一个不同的区域,而不是问题视图所属的区域)。
基于此,我做了一些挖掘,没有遇到任何关于解决"ServiceLocationProvider"错误在Prism导航的上下文中。如果可能的话,我宁愿避免嘲笑任何东西,但如果这最终成为唯一/最好的选择,那也不是不可能的。
如果有更多的信息我可以包括,请告诉我。感谢您提供的任何见解!进一步阅读,发现ServiceLocationProvider
是作为Bootstrapper.Run()
的一部分启动的。创建虚拟引导程序有一些问题,因为我不确定如何实现CreateShell
,但我意识到你可以返回一个新的DependencyObject
。
public class TestBootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return new DependencyObject();
}
}
在测试开始时需要执行以下操作以添加一个区域:
TestBootstrapper bootstrapper = new TestBootstrapper();
bootstrapper.Run();
this.RegionManager = new RegionManager();
this.RegionManager.Regions.Add(UIRegionNames.ContextResultsPane, new Region());
在正在测试的ViewModel的构造函数中,我执行以下操作来获取导航服务日志的实例:
public NavigationContextControlViewModel(IRegionManager regionManager)
{
IRegionNavigationService navigationService;
this.RegionManager = regionManager;
navigationService = this.RegionManager.Regions[UIRegionNames.ContextResultsPane].NavigationService;
navigationService.Navigated += CheckIfNavigateCanExecuteHasChanged;
this.ContextResultsNavigationJournal = navigationService.Journal;
}