如何在單元測試時僞造一個ObjectContext?我創建了我的通用存儲庫,除ObjectContext外,僞造了ObjectSet,但我無法弄清楚如何創建並將包含假ObjectSet的假ObjectContext傳遞到我的存儲庫。我的存儲庫接受一個ObjectContext類型的類。我該如何僞造ObjectContext?
任何想法?
public class FakeObjectSet<T> : IObjectSet<T> where T : class {
HashSet<T> _data;
IQueryable _query;
public FakeObjectSet(){
this._data = new HashSet<T>();
this._query = this._data.AsQueryable();
}
public void AddObject(T Item) {
this._data.Add(Item);
}
public void Attach(T Item) {
this._data.Add(Item);
}
public void DeleteObject(T Item) {
this._data.Remove(Item);
}
public void Detach(T Item) {
this._data.Remove(Item);
}
public IEnumerator<T> GetEnumerator() {
return this._data.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() {
return _data.GetEnumerator();
}
public Type ElementType {
get { return _data.AsQueryable().ElementType; }
}
public Expression Expression {
get { return _data.AsQueryable().Expression; }
}
public IQueryProvider Provider {
get { return _query.Provider; }
}
}
我的假對象集實現
public class FakeJobSet : FakeObjectSet<Job>{
}
和我的假上下文類:
public class FakeCentralRepositoryContext{
public FakeCentralRepositoryContext(){
this.Jobs = new FakeJobSet();
}
public IObjectSet<Job> Jobs
{
get; private set;
}
}
你應該意識到嘲笑和真實行爲之間的巨大差異:http://stackoverflow.com/questions/13332002/how-to-mock-the-limitations-of-entityframeworks-implementation-of-iqueryable/13352779# 13352779。 –