2016-02-13 67 views
0

我有一個包含所有命令(方法)的類CommandExecutor。我必須測試一個從給定2個參數產生報告的方法。方法使用數據庫來檢查它是否產生。在同一類C中模擬屬性和調用方法#

EDIT 1:

屬性:

public IEngine Engine { get; set; }

IEngine接口:

ICommandExecutor CommandExecutor { get; } 

IInputReader InputReader { get; } 

IOutputWriter OutputWriter { get; } 

IDatabase Database { get; } 

CommandExecutor有一個方法執行。我有創建ICommand的其他類(命令工廠)。例如,引擎從文件中讀取輸入,檢查它是否有效,拆分參數等,並創建一個ICommand。然後CommandExecutor使用此ICommand並調用方法Execute。方法執行有開關情況,如果成功或者如果命令不成功,則每個情況都會返回一個字符串,它將引發一個exepction。我想單元測試一個依賴於數據庫的方法。我可以嘲笑這個屬性引擎(在CommandExecutor中)並調用一個方法來檢查它是否正常工作?在CommandExecutor每一個方法調用this.Engine.Database .....

發動機的構造:

public Engine(
    IInputReader reader, 
    IOutputWriter writer, 
    ICommandExecutor commandExecutor, 
    IDatabase database) 
{ 
    this.InputReader = reader; 
    this.OutputWriter = writer; 
    this.CommandExecutor = commandExecutor; 
    this.CommandExecutor.Engine = this; 
    this.Database = database; 

}

var reportFound = this.Engine.Database.GetReport(name, model); 
if (reportFound != null) 
{ 
    throw new DuplicateEntryException(Constants.Duplicate); 
} 

Do something...... 

return string.Format(Constants.Test, model, name); 

我嘲笑數據庫(此方法GetReport太),發動機,其工作與嘲笑的數據庫。如何模擬CommandExecutor引擎屬性並調用我想測試的方法?

謝謝

+0

'''CommandExecutor引擎屬性''看起來像什麼?這個類的CommandExecutor'''如何看起來像?請詳細說明。 – dee

回答

0

不是真的沒有,問問自己爲什麼你想這樣做,但是。如果你想保證你的類中的一個方法調用同一個類中的另一個方法,它聽起來像是封裝在其中的業務邏輯,你不想繞過。重構到一個新的類,併爲它的巴掌一個接口,依賴注入在那裏,現在你可以模擬它。