2011-08-17 26 views

回答

0

您是否嘗試過在接口類型中存根?子可以通過構造函數注入或通過方法輸入參數傳入。例如,創建接口IEnvironment,包括GetFolderPath方法。如果你已經知道如何做到這一點,那麼隨時可以繼續前進。否則,以下演示如何在Environment類中存根。 (我在我的手機上打字,如此忍受我;)

public interface IEnvironment 
{ 
    string GetFolderPath(Environment.SpecialFolder folder); 
} 

接下來,創建一個存根:

public class MyEnvironment : Environment, IEnvironment 
{ 
    public string GetFolderPath(Environment.SpecialFolder folder) 
    { 
    return base.GetFolderPath(folder); 
    } 
} 

傳遞存根到您的方法或類構造函數的參數:

public void MyMethod(IEnvironment env) 
{ 
    var path = env.GetFolderPath(): 
} 

要進行測試,請創建一個模擬類型或痣MyEnvironment.GetGolderPath。出於性能原因,創建一個模擬比一個移動類型更可取。模擬只是返回一個值,而不是調用基本方法,就像moled類型一樣。他的存根是必要的,無論哪種方式,所以你也可以做模擬,因爲它可以重新用於其他測試。

+0

但我的生產代碼沒有能力設置Environment實例。它可以完成沒有痣,使用Moq或其他任何東西。 –

+0

我不認爲你的代碼已經存根環境類,這就是爲什麼我建議重構一個。而且,是的,它肯定可以而且應該沒有痣。存根的目的是提供將模擬類型傳遞給測試代碼的方法。 –

相關問題