Возврат Mock из метода Mocked

Я не уверен, как бы я это сделал.

Учитывая, что у меня есть

public interface IFactory<T> where T : new()
{
    IWrapper<T> GetT(string s);
}

public interface IWrapper<out T> where T : new()
{
    void Execute(Action<T> action);
}

Когда я делаю это

public class MoqTest
{
    public void test()
    {
        Mock<IWrapper<basicClass>> wrapperMock = new Mock<IWrapper<basicClass>>();
        Mock<IFactory<basicClass>> factoryMock = new Mock<IFactory<basicClass>>()
            .Setup(p => p.GetT(It.IsAny<string>()))
            .Returns(wrapperMock.Object);
    }
}

Я понял

Невозможно неявно преобразовать тип Moq.Language.Flow.IReturnsResult<TestNamespace.IFactory<TestNamespace.basicClass>> в Moq.Mock<TestNamespace.IFactory<TestNamespace.basicClass>>, Существует явное преобразование (вам не хватает приведения?)

Обратите внимание, что это просто пример объектов-примеров.

Кажется, он не считает возвращаемый тип эквивалентным. Один будучи IReturnResultдругой Moq.Mock

1 ответ

Решение

Ваша проблема в основном в том, что вы присваиваете результат вызова Returns метод к factoryMock переменная.

Вы хотите сначала создать макет и назначить его factoryMock переменная, а затем установите макет так:

Mock<IWrapper<basicClass>> wrapperMock = new Mock<IWrapper<basicClass>>();
Mock<IFactory<basicClass>> factoryMock = new Mock<IFactory<basicClass>>();

factoryMock
    .Setup(p => p.GetT(It.IsAny<string>()))
    .Returns(wrapperMock.Object);
Другие вопросы по тегам