C# 单元测试棱镜导航回调

C# 单元测试棱镜导航回调,c#,wpf,prism,C#,Wpf,Prism,我遇到的情况是,在一个视图上,我有两个内容区域,并且我希望单元测试导航远离父视图。在从此视图导航之前,我想验证内容区域中显示的两个视图是否都允许我导航。为此,视图的所有三个视图模型都实现了IConfirmNavigationRequest接口 在我的主要视图中,ConfirmNavigationRequest调用与此类似,其中RegionManager是IRegionManager的一个实现: public void ConfirmNavigationRequest(NavigationCont

我遇到的情况是,在一个视图上,我有两个内容区域,并且我希望单元测试导航远离父视图。在从此视图导航之前,我想验证内容区域中显示的两个视图是否都允许我导航。为此,视图的所有三个视图模型都实现了
IConfirmNavigationRequest
接口

在我的主要视图中,
ConfirmNavigationRequest
调用与此类似,其中
RegionManager
IRegionManager
的一个实现:

public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
    /* setup code */
    RegionManager.RequestNavigate("regionA",
        new Uri("viewA, UriKind.Relative), ViewACallback,
        navigationResult?.Context?.Parameters);
}

private void ViewACallback(NavigationResult navigationResult)
{
    if(!navigationResult.Result ?? false) return;
    /*Some Code */
    RegionManager.RequestNavigate("regionB",
        new Uri("viewB, UriKind.Relative), ViewBCallback,
        navigationResult?.Context?.Parameters);
}
private void ViewBCallback(NavigationResult navigationResult)
{
    /* some logic */
}
public void ConfirmNavigationRequest(NavigationContext NavigationContext,Action continuationCallback)
{
/*设置代码*/
RegionManager.RequestNavigate(“regionA”,
新Uri(“viewA,UriKind.Relative”)、ViewACallback、,
导航结果?.Context?.Parameters);
}
私有void ViewACallback(导航结果导航结果)
{
如果(!navigationResult.Result??false)返回;
/*一些代码*/
RegionManager.RequestNavigate(“regionB”,
新Uri(“viewB,UriKind.Relative”)、ViewBCallback、,
导航结果?.Context?.Parameters);
}
私有void ViewBCallback(NavigationResult NavigationResult)
{
/*一些逻辑*/
}
通过模拟的
IRegionManager
实例,我能够模拟区域请求回调并实现单元测试。我所面临的问题是,在链中的每一步,我都会从以前的测试中得到重复的代码。它到处散发着代码的味道,我只是想看看如何清理它

我目前的想法是将回调抽象到它们自己的类中,使用接口并能够以这种方式模拟链,但这似乎需要很大的开销。另一个想法是将回调公开为内部回调,并验证传递给
RequestNavigate
调用的回调是否正确,然后独立测试这些回调。这对我来说似乎更干净,但这将是将它们作为内部构件公开的唯一原因


只是想了解一些关于如何在这样的场景中正确地对回调进行单元测试的文章的想法或方向。

对回调使用操作的想法如何?在您的案例中,您只是在单元测试
ConfirmNavigationRequest
,对吗?你在乎回调是否真的运行吗?这可能是一个有趣的地方,可以了解如何对如下内容进行单元测试:。@R.Richards将操作用作属性类似于将当前方法回调公开为内部方法吗?我关心回调内部的逻辑单元测试。我现在用Moq伪造回调代码,嵌套回调的代码变得混乱。不,我不这么认为。我指给你看的对这没什么帮助。这开始看起来像是UI测试。