2016-07-07 129 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

回顧這兩個月後,這是相當明顯的。 –