1

我是 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()上面的代码代表什么。我确实有一个想法,Will(Return.Value(something))在 NMock2 中相当于Returns(something)在 Moq 中。

那么Will(something)Will(Return.Value(something))一样吗?

4

1 回答 1

1

要知道区别,我们必须进行一些调查。让我们看一下幕后,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方法中简单地设置返回值以供模拟使用/预期。然而,这不是重点。Return.Value是创建IAction所需的简单包装器Will

MyAcceptAction还必须实现此接口;知道到底发生了什么

Stub.On(myMock).Method("Accept").Will(acceptAction);

行,您将不得不检查如何MyAcceptAction实施。特别是Invoke方法。

于 2012-06-22T08:02:02.627 回答