2010-11-18 27 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)