我有一个控制台应用程序。
当我调用逻辑时,我传入一个Action以便显示到控制台。
我的控制台应用程序看起来有点像
static Main(string[] args)
{
var myLogicClass = new LogicClass(WriteToConsole);
//…. more code
}
static void WriteToConsole(string s)
{
Console.WriteLine(s);
}
Run Code Online (Sandbox Code Playgroud)
抱歉,如果代码不是完美的,我这里没有Visual Studio,因此只能从内存中进行操作。
现在,我需要测试我的代码。我想用duff方法模拟WriteToConsole,该方法实际上什么也没做。
我想做的是在单元测试中
var myLogicClass = new LogicClass(new Action<string>());
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。
我没有使用任何DI框架,所以无法模拟任何东西(我也不想)。
我知道一个解决方案是简单地创建一个与签名匹配的方法,但是我很好奇这是否可以通过上面描述的方式来实现吗?
您可以传入一个不做任何事情的lambda表达式Action<string>。
遵循以下内容的东西应该起作用,并且在调用时什么也不做:
var myLogicClass = new LogicClass(_ => {});
Run Code Online (Sandbox Code Playgroud)
舍弃(_)是C#7的功能,因此,如果您要放弃早期版本的语言,则需要使用另一个变量名。编辑:正如@Lee在注释中指出的那样,以这种方式在旧版本的C#中使用丢弃变量是可以的-尽管您不应该命名变量x => {}将是一个很好的替代品。_然后在以后尝试使用它。
如果愿意,您可以始终创建一个方法,并将其作为委托转换传入。
void DoNothing(string val) { return; }
...
var myLogicClass = new LogicClass(DoNothing);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |