2016-03-07 48 views
0

我有一個嘲笑對象:差時callbase被觸發

var mockA = new Mock<AClass>(); 

ACLASS看起來是這樣的:

public class AClass() 
{ 
    public void someMethod() 
    { 
    //dostuff 
    } 
} 

這將是

之間的區別
mockA.CallBase = false; 
mockA.Object.someMethod(); 

和這個?

mockA.CallBase = true; 
mockA.Object.someMethod(); 
+0

在你的例子中沒有繼承,所以它們之間沒有區別。 – Valentin

回答

4

你需要擴展你的類多一點來看看CallBase屬性的用法。 CallBase屬性允許我們通知一個模擬對象,如果沒有期望覆蓋成員,我們希望它調用基類實現。因此,例如您的ACLASS有一個基類BaseClass的

public class BaseClass 
{ 
    public virtual string GetStatus 
    { 
     get{ 
      return "Ok"; 
     } 
    } 
} 

public class AClass():BaseClass 
{ 
    public bool someMethod() 
    { 
     return GetStatus == "Ok"; 
    } 
} 

現在,如果你運行你的第一個測試

mockA.CallBase = false; 
Assert.IsTrue(mockA.Object.someMethod()); 

這將失敗,因爲呼叫基地不調用的getStatus不會被初始化它只會爲空;

現在第二個測試會通過,因爲CallBase屬性爲true,並且GetStatus字符串將被初始化爲「Ok」。

mockA.CallBase = true; 
Assert.IsTrue(mockA.Object.someMethod());