使用 Microsoft Fakes 设置参数
Setting out parameters with Microsoft Fakes
所以我正在尝试 Microsoft Fakes,我喜欢它,但是我有一个带有 out 参数的静态方法,但我不知道如何使用它:
静态伪造方法:
public static class Foo
{
public static bool TryBar(string str, out string stuff)
{
stuff = str;
return true;
}
}
测试:
[TestFixture]
public class MyTestTests
{
[Test]
public void MyTest()
{
using (ShimsContext.Create())
{
string output;
ShimFoo.TryBarStringStringOut = (input, out output) =>
{
output = "Yada yada yada";
return false;
};
}
}
}
现在我在测试中遇到错误,声称我的输出参数错误(“无法解析符号 'output'”)。我一直在尝试获取一些有关如何处理参数的文档,但找不到任何内容。有人有经验吗?
一问就想明白。对于遇到此问题的其他人,我是这样解决的:
[TestFixture]
public class MyTestTests
{
[Test]
public void MyTest()
{
using (ShimsContext.Create())
{
ShimFoo.TryBarStringStringOut = (string input, out string output) =>
{
output = "Yada yada yada";
return false;
};
}
}
}
澄清一下,答案是当你的 shimmed 方法包含 out 参数时,你需要为 lambda 表达式的所有参数声明类型。
例如,这行不通..
ShimFoo.TryBarStringStringOut = (input, out output) => { ... };
这行不通...
ShimFoo.TryBarStringStringOut = (input, out string output) => { ... };
但是(如 Maffelu 的回答)这 将 工作...
ShimFoo.TryBarStringStringOut = (string input, out string output) => { ... };
所以我正在尝试 Microsoft Fakes,我喜欢它,但是我有一个带有 out 参数的静态方法,但我不知道如何使用它:
静态伪造方法:
public static class Foo
{
public static bool TryBar(string str, out string stuff)
{
stuff = str;
return true;
}
}
测试:
[TestFixture]
public class MyTestTests
{
[Test]
public void MyTest()
{
using (ShimsContext.Create())
{
string output;
ShimFoo.TryBarStringStringOut = (input, out output) =>
{
output = "Yada yada yada";
return false;
};
}
}
}
现在我在测试中遇到错误,声称我的输出参数错误(“无法解析符号 'output'”)。我一直在尝试获取一些有关如何处理参数的文档,但找不到任何内容。有人有经验吗?
一问就想明白。对于遇到此问题的其他人,我是这样解决的:
[TestFixture]
public class MyTestTests
{
[Test]
public void MyTest()
{
using (ShimsContext.Create())
{
ShimFoo.TryBarStringStringOut = (string input, out string output) =>
{
output = "Yada yada yada";
return false;
};
}
}
}
澄清一下,答案是当你的 shimmed 方法包含 out 参数时,你需要为 lambda 表达式的所有参数声明类型。
例如,这行不通..
ShimFoo.TryBarStringStringOut = (input, out output) => { ... };
这行不通...
ShimFoo.TryBarStringStringOut = (input, out string output) => { ... };
但是(如 Maffelu 的回答)这 将 工作...
ShimFoo.TryBarStringStringOut = (string input, out string output) => { ... };