Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rhino模拟和WPF窗口对话框_Wpf_Unit Testing_Modal Dialog_Rhino Mocks - Fatal编程技术网

Rhino模拟和WPF窗口对话框

Rhino模拟和WPF窗口对话框,wpf,unit-testing,modal-dialog,rhino-mocks,Wpf,Unit Testing,Modal Dialog,Rhino Mocks,我正在为MvvM场景中的OK_Execute命令编写单元测试 现在,在方法调用之前,这一切正常: obj.DialogResult = !datumExistiertBereits || datumUeberschreiben; obj.Close(); 其中第一行触发以下InvalidOperationException: 只有在创建窗口并显示为对话框后,才能设置DialogResult 现在我想知道如何让我的窗口存根对象负责这些调用,而不在单元测试中真正

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

现在,在方法调用之前,这一切正常:

        obj.DialogResult = !datumExistiertBereits || datumUeberschreiben;
        obj.Close();  
其中第一行触发以下InvalidOperationException:

只有在创建窗口并显示为对话框后,才能设置DialogResult

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

提前谢谢


Steav

您需要将显示实际对话框(或任何窗口)的职责转移到一个单独的类,该类实现一个接口,并且只将该类的一个实例交给使用它的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>() );
接口IDialogService
{
结果显示对话框();
}
类视图模型
{
ViewModel(IDialogService dlgService){…}
void ExecuteSomeCommand()
{
var result=dlgService.ShowDialog();
}
}
//实际代码
类ActualDialog:IDialogService{…}
var vm=new ViewModel(new ActualDialog());
//测试伪代码(对不起,我不知道)
var vm=newviewmodel(RhinoMock.GetMeAMockFor());
您可以很容易地看到它的优点:vm对对话框一无所知,不再依赖于显示/关闭窗口的代码,而且您可以通过模拟对话框服务来测试代码