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