如何使用Ninject的MockingKernel(moq)设置模拟

时间:2012-11-03 19:25:57

标签: ninject moq ninject-mockingkernel

我很难找到如何对.SetupXXX()内生成的基础Mock<T>进行MockingKernel调用。谁可以阐明它应该如何运作呢?

1 个答案:

答案 0 :(得分:15)

您需要在GetMock<T>上调用MoqMockingKernel方法,该方法将返回您可以调用Mock<T>方法的生成的.SetupXXX()/VerifyXXX()

以下是演示GetMock<T>用法的示例单元测试:

[Test]
public void Test()
{
    var mockingKernel = new MoqMockingKernel();
    var serviceMock = mockingKernel.GetMock<IService>();
    serviceMock.Setup(m => m.GetGreetings()).Returns("World");
    var sut = mockingKernel.Get<MyClass>();
    Assert.AreEqual("Hello World", sut.SayHello());    
}

涉及的类型如下:

public interface IService { string GetGreetings(); }

public class MyClass
{
    private readonly IService service;

    public MyClass(IService service) { this.service = service; }

    public string SayHello()
    {
        return string.Format("Hello {0}", service.GetGreetings());
    }
}

请注意,您可以使用Moq.MockRepository属性访问生成的MoqMockingKernel.MockRepository(如果您更喜欢使用SetupXXX方法)。