我有以下接口:
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。没有更多上下文很难知道。