C# 如何填充OpenFileDialog.ShowDialog方法

C# 如何填充OpenFileDialog.ShowDialog方法,c#,unit-testing,microsoft-fakes,C#,Unit Testing,Microsoft Fakes,我有一个WPF ViewModel,它有一个命令,可以打开一个文件对话框,如下所示: var dlg = new OpenFileDialog(); var result = dlg.ShowDialog(); Microsoft.Win32.Fakes.ShimCommonDialog.AllInstances.ShowDialog = () => true; 现在我想对该命令进行单元测试。ShowDialog是从CommonDialog继承的一种方法,因此我假设我可以这样填充它:

我有一个WPF ViewModel,它有一个命令,可以打开一个文件对话框,如下所示:

var dlg = new OpenFileDialog();
var result = dlg.ShowDialog();
Microsoft.Win32.Fakes.ShimCommonDialog.AllInstances.ShowDialog = () => true;
现在我想对该命令进行单元测试。ShowDialog是从CommonDialog继承的一种方法,因此我假设我可以这样填充它:

var dlg = new OpenFileDialog();
var result = dlg.ShowDialog();
Microsoft.Win32.Fakes.ShimCommonDialog.AllInstances.ShowDialog = () => true;
但我得到了以下编译错误:

委托Microsoft.QualityTools.Testing.Fakes.FakesDelegates.Func不接受0个参数


有什么想法吗?

下面的代码将满足您的需要

测试中的系统SUT

使用MS-Fakes进行单元测试


请注意,测试中需要PresentationFramework.4.0.0.0.Fakes程序集以及正确的其他Fakes程序集。

下面的代码将满足您的需要

测试中的系统SUT

使用MS-Fakes进行单元测试


请注意,您需要在测试中使用PresentationFramework.4.0.0.0.Fakes程序集以及正确的其他Fakes程序集。

我不确定这是否有帮助,但对话框是否返回DialogResult,而不是bool?可能通过指定bool,您使用了另一个委托,该委托期望传入一个参数。ShowDialog返回可为空的bool,即bool?@CodeontheCommode:您考虑的是Form.ShowDialog。正如菲利普所说,OpenFileDialog返回一个可为空的bool。我不确定这是否有帮助,但对话框不返回DialogResult而不是bool吗?可能通过指定bool,您使用了另一个委托,该委托期望传入一个参数。ShowDialog返回可为空的bool,即bool?@CodeontheCommode:您考虑的是Form.ShowDialog。正如菲利普所说,OpenFileDialog返回一个可为null的bool。好吧,所以我错过了这个x-如果OpenDialog不带参数,为什么需要它?它带了一个参数,它带了它打开的对话框的一个实例。它可能是一个扩展方法,或者有一个可选参数。好的,所以我缺少了这个x-如果OpenDialog不带参数,为什么需要它?它带了一个参数,它带了它打开的对话框的一个实例。它可以是一个扩展方法,也可以有一个可选参数。