我是NMock2和Moq框架的新手。我需要一些帮助将我当前项目中的NMock2代码转换为Moq代码:
var myMock= myMockery.NewMock<IMyInterface>();
var myRoleMock = myMockery.NewMock<IRoleInterface>();
var acceptAction = new MyAcceptAction(myRoleMock);
Stub.On(myMock).Method("Accept").Will(acceptAction);我也不清楚上面代码中的Will()代表什么。我确实有一个想法,即NMock2中的Will(Return.Value(something))等同于Moq中的Returns(something)。
那么Will(something)和Will(Return.Value(something))是一样的吗?
发布于 2012-06-22 16:02:03
要了解其中的差异,我们必须进行一些调查。让我们看看幕后的内容,Will方法的签名如下:
public void Will(params IAction[] actions)现在,IAction接口起源于一个特别重要的接口,它就是IInvokable。顾名思义,这允许实现者被调用(通过Invoke方法)。它与Return.Value有什么关系?
public class Return
{
public static IAction Value(object result)
{
return new ReturnAction(result);
}
}再深入一点,我们会发现ReturnAction在它的Invoke方法中只是简单地设置了mock要使用/期望的返回值。然而,这不是重点。Return.Value是一个创建Will所需的IAction的简单包装器。
您的MyAcceptAction也必须实现此接口;以了解
Stub.On(myMock).Method("Accept").Will(acceptAction);行,您将必须检查MyAcceptAction是如何实现的。特别是Invoke方法。
https://stackoverflow.com/questions/11150347
复制相似问题