我有以下界面:
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吗?如果没有,是否有另一个允许这种行为的模拟框架?
答案 0 :(得分:8)
您可以使用Invokes
获得该行为:
String output = "";
A.CallTo(() => outputDestination.Write(A<String>.Ignored))
.Invokes((string s) => output += s);
答案 1 :(得分:0)
创建后,您并未真正展示自己如何使用outputDestination
。你会把它注入一些被测试的方法吗?如果是这样,那么如果您创建一个实现IOutputDestination
且包含Write()
所需实现的特制类,而不是创建假的,那该怎么办?
我想这取决于您需要在假货上验证的其他行为(如果有的话)。没有更多的背景,很难知道。