2010-11-18 51 views
2

我有以下用於單元測試的僞造知識庫。我將如何在這個倉庫中實現Attach(T實體)方法? (在我的真實存儲庫中,使用Attach(T實體)方法將對象附加到我的實體框架4數據上下文中)。用於單元測試的C#通用知識庫

public class FakeRepository<T> : IRepository<T> where T : class, new() 
{ 
    private static List<T> entities = new List<T>(); 

    public IQueryable<T> Entities 
    { 
     get { return entities.AsQueryable(); } 
    } 

    public T New() 
    { 
     return new T(); 
    } 

    public void Create(T entity) 
    { 
     entities.Add(entity); 
    } 

    public void Delete(T entity) 
    { 
     entities.Remove(entity); 
    } 

    public void Attach(T entity) 
    { 
     //How to implement Attach??? 
    } 

    public void Save() 
    { 
     //Do nothing 
    } 

    public void Dispose() 
    { 
     return; 
    } 
} 

回答

2

要回答這個問題,你要問自己:「是什麼」的宗旨Attach?「你可能知道的一點是要告訴庫」這個對象持久化到數據庫,但你目前沒有跟蹤它;我已經對它進行了更新,並且我希望你在提交更改時提交它們。「

因此,要測試Attach是否正常工作,應該維護附加對象的集合並將實體添加到當它傳遞一個參數來Attach此集合。

所以,最簡單的實現將是

entities.Add(entity); 

,但你可以考慮一些更精細的。需要注意的是,你需要公開,可以讓你的方法斷言該實體已成功連接(在EF4中,您可以使用ObjectStateManager.TryGetObjectStateEntry)。

+0

是的 - 這是有道理的。謝謝。 – thd 2010-11-18 21:47:14

1

擺脫實體成員上的靜態詞。現在只是做

enitities.Add(entity)