2009-08-05 100 views
4

我使用Moq進行單元測試。它命令Moq工作,屬性和方法必須標記爲虛擬。有時我傳入數據並在構造函數中設置屬性值。是不是有一個規則,你不應該在constrcutors中設置虛擬屬性,因爲它可能會導致意想不到的行爲(如果該類是從基類繼承的)還是安全的呢?Moq和虛擬屬性和方法

回答

6

這的確是一個問題,而Visual Studio Code Analysis explicitly checks for this

一個簡單的解決方法是將工作移動到非虛擬內部成員,然後使用虛擬方法調用以及構造函數。類似這樣的:

public class MyClass 
{ 
    public MyClass() 
    { 
     this.DoStuffInternal(); 
    } 

    public virtual void DoStuff() 
    { 
     this.DoStuffInternal(); 
    } 

    internal void DoStuffInternal() 
    { 
     // Interesting stuff happens here 
    } 
}