使用Microsoft Fakes设置参数

Maf*_*elu 4 c# microsoft-fakes

所以我正在尝试Microsoft Fakes并且我喜欢它,但是我有一个带有out参数的静态方法,我无法弄清楚如何使用它:

静态方法假:

public static class Foo
{
    public static bool TryBar(string str, out string stuff)
    {
        stuff = str;

        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

测试:

[TestFixture]
public class MyTestTests
{
    [Test]
    public void MyTest()
    {
        using (ShimsContext.Create())
        {
            string output;
            ShimFoo.TryBarStringStringOut = (input, out output) =>
            {
                output = "Yada yada yada";

                return false;
            };
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我的测试中出现错误,声称我的输出参数错误(" 无法解析符号'输出' ").我一直试图获得一些如何处理参数的文档,但我找不到任何东西.有人有经验吗?

Maf*_*elu 6

一旦你要求你解决问题.对于其他有这个问题的人我解决了这个问题:

[TestFixture]
public class MyTestTests
{
    [Test]
    public void MyTest()
    {
        using (ShimsContext.Create())
        {
            ShimFoo.TryBarStringStringOut = (string input, out string output) =>
            {
                output = "Yada yada yada";

                return false;
            };
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

为了澄清这一点,答案是当shimmed方法包含out参数时,需要声明lambda表达式的所有参数的类型.

例如,这不起作用..

ShimFoo.TryBarStringStringOut = (input, out output) => { ... };

这不会奏效......

ShimFoo.TryBarStringStringOut = (input, out string output) => { ... };

但是(如Maffelu的答案)这有效......

ShimFoo.TryBarStringStringOut = (string input, out string output) => { ... };