gpt4 book ai didi

wpf - Rhino Mock 和 WPF 窗口对话框

转载 作者:行者123 更新时间:2023-12-04 05:46:00 27 4
gpt4 key购买 nike

我正在为 MvvM 场景中的 OK_Execute 命令编写单元测试。

现在一切正常,直到方法调用:

        obj.DialogResult = !datumExistiertBereits || datumUeberschreiben;
obj.Close();

其中第一行触发以下 InvalidOperationException:

DialogResult can be set only after Window is created and shown as dialog.



现在我想知道如何让我的窗口 stub 对象对这些调用负责,而不在我的单元测试中真正显示对话框?

提前致谢

斯蒂夫

最佳答案

您需要将显示实际对话框(或任何窗口)的责任转移到一个单独的类中,该类实现一个接口(interface),并且只将该类的一个实例交给使用它的 VM。

例子:

interface IDialogService
{
Result ShowDialog();
}

class ViewModel
{
ViewModel( IDialogService dlgService ) { ... }

void ExecuteSomeCommand()
{
var result = dlgService.ShowDialog();
}
}

//actual code
class ActualDialog : IDialogService { ... }

var vm = new ViewModel( new ActualDialog() );

//test pseudocode (sorry I don't know RhinoMock)
var vm = new ViewModel( RhinoMock.GetMeAMockFor<IDialogService>() );

您可以很容易地看到它的优点:vm 对对话框一无所知,并且不再依赖于显示/关闭窗口的代码,而且您可以通过模拟对话框服务来测试代码。

关于wpf - Rhino Mock 和 WPF 窗口对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10684783/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com