我真的很陌生,我试图用模拟对象替换私人领域。目前私有字段的实例是在构造函数中创建的。我的代码看起来像......如何模拟私人领域?
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