2015-11-05 29 views
0

我已經使用moq一段時間進行單元測試, 我在想爲什麼我的模擬對象無法轉換爲接口,即使它實現了接口方法它之後沒有任何返回它被轉換爲接口,這裏是我的簡單代碼:將Mock具體對象轉換爲接口導致空實現

POSRepository repo = this.mockPosRepository.Object; 
IPOSRepository posRepo = repo; 
if(repo.Prices.Count() > 0) // True 
if(posRepo.Prices.Count() > 0) // false 

我錯過了什麼嗎?

+0

如何創建'this.mockPosRepository'? – Domysee

回答

0

可以使用As方法來添加接口模擬對象,像這樣:

mockPosRepository.As<IPOSRepository>(); 

不幸的是,起訂量並不僅僅工作了,它應該是能夠轉換對象,如果類實現接口。

0

@domysee,您的回覆THX我已經通過檢查創建過程中成功地解決了這個問題,我應該創建一個真正的類,而不是一個模擬類......我創建一個類似這樣的代碼

[TestMethod] 
    public void Test_Clean_Price() 
    { 
     Mock<CalcProcessor> calcProcessor = new Mock<CalcProcessor>(); 
     calcProcessor.Setup(s => s.AddProcessor(It.IsAny<int>(), It.IsAny<int>())).Returns(1); 
     Mock<Calc> calc = new Mock<Calc>(calcProcessor.Object);//this should not a mock object 
     ICalc icalc = calc.Object; 
     int resultObject = calc.Object.Add(1, 2); 
     int resultInterface = icalc.Add(1, 2); 

     Assert.AreEqual(1,resultObject);//result 0 
     Assert.AreEqual(1, resultInterface);//result 0 

    } 
} 
public class CalcProcessor 
{ 
    public virtual int AddProcessor(int a, int b) 
    { 
     return a + b; 
    } 
} 

public class Calc : ICalc 
{ 
    private CalcProcessor cp; 

    public Calc(CalcProcessor calcp) 
    { 
     this.cp = calcp; 
    } 
    public virtual int Add(int a, int b) 
    { 
     return this.cp.AddProcessor(a,b); 
    } 

    public virtual int Substract(int a, int b) 
    { 
     throw new NotImplementedException(); 
    } 
} 


public interface ICalc 
{ 
    int Add(int a, int b); 

    int Substract(int a, int b); 
} 
問題
相關問題