如何模拟'out'参数?

时间:2011-07-28 15:23:45

标签: .net nsubstitute systemwrapper

我已经下载了最新的NSubstitute版本,1.1.0,2011年5月21日。在此版本之前,似乎NSub不支持输出参数。似乎已经做了一些工作来通过中间版本提供支持:NSub Google Group

所以,我在试图让所有部分工作时遇到一些麻烦。我使用SystemWrapper来模拟DirectoryInfo

这是我的界面:

    public interface INetworkPath
    {
        void SetPath(string NetworkPath);
        bool TryGetDirectoryInfo(out IDirectoryInfoWrap DirectoryInfo);
    }

......和测试:

public void SetNetworkPath_SetDirectoryInfo()
{
    var netPath = Substitute.For<INetworkPath>();
    netPath.SetPath("SomeNetworkPath");
    IDirectoryInfoWrap DirectoryInfo;

    netPath.TryGetDirectoryInfo(out DirectoryInfo)
           .Returns(d => {   // cannot convert lambda expression to type bool because it is not a delegate type
               d[1] = Substitute.For<IDirectoryInfoWrap>();  //  d[1] is read only
               return true;
           });

    Assert.IsNotNull(DirectoryInfo);
}

有没有办法从INetworkPath接口模拟out参数?

更新

尝试以下操作:虽然它编译,但DirectoryInfo返回null:

[Test]
public void SetNetworkPath_SetDirectoryInfo()
{
    var netPath = Substitute.For<INetworkPath>();
    netPath.SetPath("SomeNetworkPath");
    IDirectoryInfoWrap DirectoryInfo;

    netPath.TryGetDirectoryInfo(out DirectoryInfo)
           .Returns(d => { 
               d = (CallInfo)Substitute.For<IDirectoryInfoWrap>();
               return true;
           });

    Assert.IsNotNull(DirectoryInfo);
}

1 个答案:

答案 0 :(得分:2)

我不相信您要查找的实现是随1.1发布的,但事后已完成(Ref and out support commit)。您可能需要完成代码的拉动并自行构建。