2011-10-07 45 views
0

如何在單元測試時僞造一個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; 
    } 
} 
+1

你應該意識到嘲笑和真實行爲之間的巨大差異:http://stackoverflow.com/questions/13332002/how-to-mock-the-limitations-of-entityframeworks-implementation-of-iqueryable/13352779# 13352779。 –

回答

0

修改你的資料庫採取IObjectSet而不是對象集,那麼你可以通過你的假背景下進入倉庫與您在實際實施中傳遞的方式相同。或者,使用IOC來注入上下文。

+0

你的意思是傳入一個IobjectSet到存儲庫的構造函數中嗎? –