FakeItEasy - 是否有可能拦截一个方法并将其替换为我自己的实现?

mar*_*set 7 c# unit-testing mocking fakeiteasy

我有以下界面:

public interface IOuputDestination
{
    void Write(String s);
}
Run Code Online (Sandbox Code Playgroud)

在我的单元测试中,我这样模仿它:

var outputDestination = A.Fake<IOutputDestination>();
Run Code Online (Sandbox Code Playgroud)

我想要做的是拦截Write方法,以便它使用我在测试中定义的自定义实现.像这样的东西:

String output = "";
A.CallTo(() => outputDestination.Write(A<String>.Ignored)).Action(s => output += s);
              //Is something like this even possible ? ----^
Run Code Online (Sandbox Code Playgroud)

这里的Action方法不存在,但我想要发生的是传入的任何参数都outputDestination.Write被重定向到我的自定义操作.这可能是使用FakeItEasy吗?如果没有,是否有另一个允许这种行为的模拟框架?

k.m*_*k.m 8

你可以与行为Invokes:

String output = "";
A.CallTo(() => outputDestination.Write(A<String>.Ignored))
    .Invokes((string s) => output += s);
Run Code Online (Sandbox Code Playgroud)