假性 - 是否可以拦截方法并用我自己的实现替换



我有以下接口:

public interface IOuputDestination
{
    void Write(String s);
}

在我的单位测试中,我像这样模拟它:

var outputDestination = A.Fake<IOutputDestination>();

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

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

这里不存在Action方法,但是我想发生的是将任何参数传递到outputDestination.Write中的任何参数都可以重定向到我的自定义操作。这可以使用假曲吗?如果没有,还有另一个允许这种行为的模拟框架吗?

您可以使用Invokes

获得该行为
String output = "";
A.CallTo(() => outputDestination.Write(A<String>.Ignored))
    .Invokes((string s) => output += s);

创建后,您并没有真正显示如何使用outputDestination。您会将其注入一些正在测试的方法中吗?如果是这样,那么如果您创建一个专门设计的类,该类别实现IOutputDestination并包含您所需的Write()的实现,该怎么办?

我想这将取决于您需要在假货上验证的其他bahaviours。没有更多上下文很难知道。

相关内容

最新更新