2016-07-07 131 views
0

我不知道我会如何做到这一点。从模拟方法返回模拟

鉴于我有

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

回答

3

你的问题主要是,你正在分配调用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); 
+0

回顾这两个月后,这是相当明显的。 –