从Mocked方法中返回一个模拟

时间:2016-07-07 11:22:45

标签: c# mocking moq

我不确定我会怎么做。

鉴于我有

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 个答案:

答案 0 :(得分:5)

您的问题主要在于您将调用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);