如何填充OpenFileDialog.ShowDialog方法

fil*_*lip 1 c# unit-testing microsoft-fakes

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

var dlg = new OpenFileDialog();
var result = dlg.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

现在我想对该命令进行单元测试.ShowDialog是一个继承自CommonDialog的方法,所以我假设我可以像这样填充它:

Microsoft.Win32.Fakes.ShimCommonDialog.AllInstances.ShowDialog = () => true;
Run Code Online (Sandbox Code Playgroud)

但我收到以下编译错误:

Delegate Microsoft.QualityTools.Testing.Fakes.FakesDelegates.Func<Microsoft.Win32.CommonDialog,bool?>不接受0个参数

有任何想法吗?

Spo*_*ock 5

以下代码将实现您的需求.

被测系统(SUT)

public class Sut
{
    public bool SomeMethod()
    {
        var dlg = new OpenFileDialog();
        var result = dlg.ShowDialog();
        return result.Value;
    }
}
Run Code Online (Sandbox Code Playgroud)

单元测试(使用MS Fakes)

using System;
using Microsoft.QualityTools.Testing.Fakes;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.Win32.Fakes;
using WpfApplication1;

    [TestMethod]
    public void SomeTest()
    {
        using (var context = ShimsContext.Create())
        {
            Nullable<bool> b2 = true;
            ShimCommonDialog.AllInstances.ShowDialog = (x) => b2;

            var sut = new Sut();

            var r = sut.SomeMethod();

            Assert.IsTrue(r);
        }
    }
Run Code Online (Sandbox Code Playgroud)

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