7

我有以下界面:

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

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

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

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

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

此处该Action方法不存在,但我希望将传入的任何参数outputDestination.Write重定向到我的自定义操作。这可以使用 FakeItEasy 吗?如果没有,是否有另一个允许这种行为的模拟框架?

4

2 回答 2

8

您可以通过以下方式获得该行为Invokes

String output = "";
A.CallTo(() => outputDestination.Write(A<String>.Ignored))
    .Invokes((string s) => output += s);
于 2012-10-19T19:23:41.693 回答
0

outputDestination一旦你创建了它,你并没有真正展示你是如何使用它的。你会把它注入到一些正在测试的方法中吗?如果是这样,那么如果不是创建一个假的,而是创建一个特制的类来实现IOutputDestination并包含您所需的实现Write()呢?

我想这将取决于你需要验证你的假货的其他行为(如果有的话)。没有更多的上下文很难知道。

于 2012-12-27T14:20:31.860 回答