2012-07-23 139 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

通过与类型的嘲笑版本我们没有自己的测试相互作用,我们真的 不使用我们的测试,以检查正确的行为,也没有对 推出合作者的设计。我们所有的测试正在做的是 重申我们的猜测,其他类型是如何工作的。当然,这是由多比没有测试 更好的,但不一定。