2012-07-23 83 views
1

我要測試我的EF模型。爲了做到這一點,我創建了IDbContext類。但我不知道如何重寫我的保存和刪除方法,因爲我不知道該怎麼寫 db.Partner.AddObject(OBJ);如何重寫這些方法?測試實體框架模型

public interface IDbContext 
    { 
     int SaveChanges(); 
     DbSet<Partner> Partner { get; set; }  
    }  
public class PartnerRepository : IPartnerRepository 
{ 
    readonly IDbContext _context; 
    public PartnerRepository() 
    { 
     _context = (IDbContext)new VostokPortalEntities(); 
    } 
    public PartnerRepository(IDbContext context) 
    { 
     _context = context; 
    } 

    public void Save(Partner obj) 
    { 
     using (var db = new VostokPortalEntities()) 
     { 
      if (obj.PartnerID == 0) 
      { 
       db.Partner.AddObject(obj); 
      } 
      else 
      { 
       db.Partner.Attach(obj); 
       db.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified); 
      } 
      db.SaveChanges(); 
     } 
    } 
    public void Delete(Partner obj) 
    { 

     using (var db = new VostokPortalEntities()) 
     { 

      db.Partner.Attach(obj); 
      db.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Deleted); 
      db.SaveChanges(); 
     } 
    } 
    public List<Partner> GetAll() 
    { 
     using (var db = new VostokPortalEntities()) 
     { 
      return db.Partner.OrderByDescending(i => i.PartnerID).ToList(); 
     } 
    } 
} 

這是測試EF模型的正確方法嗎?倉庫的

回答

4

單元測試需要花費大量的時間,不會給你帶來許多好處。爲什麼?因爲存儲庫沒有複雜的業務邏輯。通常對基礎數據訪問API(即ORM)進行非常簡單的調用。我認爲把時間花在編寫完整的堆棧驗收測試上會更好,這也將顯示您的存儲庫是否能夠完成其工作。

BTW有有趣的規則Don't Mock what you don't own

通過與類型的嘲笑版本我們沒有自己的測試相互作用,我們真的 不使用我們的測試,以檢查正確的行爲,也沒有對 推出合作者的設計。我們所有的測試正在做的是 重申我們的猜測,其他類型是如何工作的。當然,這是由多比沒有測試 更好的,但不一定。