Возврат 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);