我真的很陌生,我試圖用模擬對象替換私人領域。目前私有字段的實例是在構造函數中創建的。我的代碼看起來像......如何模擬私人領域?
public class Cache {
private ISnapshot _lastest_snapshot;
public ISnapshot LatestSnapshot {
get { return this._lastest_snapshot; }
private set { this._latest_snapshot = value; }
}
public Cache() {
this.LatestSnapshot = new Snapshot();
}
public void Freeze(IUpdates Updates) {
ISnapshot _next = this.LastestSnapshot.CreateNext();
_next.FreezeFrom(Updates);
this.LastestSnapshot = _next;
}
}
我想要做的就是創建一個單元測試,斷言ISnapshot.FreezeFrom(IUpdates)
從Cache.Freeze(IUpdates)
中調用。我猜我應該用模擬對象替換私人領域_latest_snapshot
(也許錯誤的假設?)。我會怎樣去解決這個問題,同時仍然保留一個無參數的構造函數,而不是使LatestSnapshot
被公開?
如果我完全想用錯誤的方式編寫測試,那麼請指出。
ISnapshot.FreezeFrom
本身的實際實現本身調用了其他方法的深層對象圖,所以我並不太熱衷於斷言對象圖。
在此先感謝。
如果被測試的類使用表示數據庫的私有字段會怎麼樣?我如何模擬該數據庫字段? – Vanuan 2011-05-11 19:50:15
你想知道存儲庫模式,它基本上隱藏了一組接口後面的數據存儲,所以它們可以很容易地進行模擬和測試。 – Jason 2011-05-12 14:53:51
但是,你是如何構建模擬存儲庫並將其傳遞給消費者的?你需要一個setter還是一個構造函數參數? – Vanuan 2011-05-12 18:29:24