如何为 Prism 中的单元测试导航设置 ServiceLocationProvider?
How to set up ServiceLocationProvider for unit testing navigation in Prism?
我正在处理的一个 Prism/Unity 应用程序有一个视图,负责实施 RegionNavigationJournal
的 GoBack()
和 GoForward()
方法。这将是我第一次需要对使用 RegionManager 的任何东西进行单元测试,我 运行 遇到一个错误,提示
ServiceLocationProvider must be set
当我尝试定位其导航被控制的区域时(该区域与相关视图所属的区域不同)。
基于此,我进行了一些挖掘,但没有发现任何有关解决 Prism 导航上下文中的 "ServiceLocationProvider" 错误的信息。如果可能的话,我宁愿避免模拟任何东西,但如果最终成为 only/best 选项,那也不是不可能的。
如果我可以包含更多信息,请告诉我。感谢您提供的任何见解!
阅读更多内容后发现 ServiceLocationProvider
是作为 Bootstrapper.Run()
的一部分启动的。在创建虚拟引导程序时遇到了一些问题,因为我不确定如何实现 CreateShell
,但我意识到你可以 return 一个新的 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;
}
我正在处理的一个 Prism/Unity 应用程序有一个视图,负责实施 RegionNavigationJournal
的 GoBack()
和 GoForward()
方法。这将是我第一次需要对使用 RegionManager 的任何东西进行单元测试,我 运行 遇到一个错误,提示
ServiceLocationProvider must be set
当我尝试定位其导航被控制的区域时(该区域与相关视图所属的区域不同)。
基于此,我进行了一些挖掘,但没有发现任何有关解决 Prism 导航上下文中的 "ServiceLocationProvider" 错误的信息。如果可能的话,我宁愿避免模拟任何东西,但如果最终成为 only/best 选项,那也不是不可能的。
如果我可以包含更多信息,请告诉我。感谢您提供的任何见解!
阅读更多内容后发现 ServiceLocationProvider
是作为 Bootstrapper.Run()
的一部分启动的。在创建虚拟引导程序时遇到了一些问题,因为我不确定如何实现 CreateShell
,但我意识到你可以 return 一个新的 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;
}