Как сделать установку mocks с Ninject MockingKernel (moq)

Мне очень тяжело пытаться понять, как я могу делать вызовы .SetupXXX() лежащего в основе Mock<T>, которые были сгенерированы внутри MockingKernel. Любой, кто может пролить свет на то, как он должен работать?

Ответ 1

Вам нужно вызвать метод GetMock<T> в MoqMockingKernel, который вернет сгенерированный Mock<T>, на который вы можете вызвать методы .SetupXXX()/VerifyXXX().

Вот пример unit test, который демонстрирует использование 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 (если вы предпочитаете его по методам SetupXXX) с свойством MoqMockingKernel.MockRepository.