C# 测试实体框架模型
我要测试我的EF模型。为了做到这一点,我创建了IDbContext类。但我不知道如何重写Save和Delete方法,因为我不知道如何编写 db.Partner.AddObject(obj)如何重写这些方法C# 测试实体框架模型,c#,entity-framework,unit-testing,repository,C#,Entity Framework,Unit Testing,Repository,我要测试我的EF模型。为了做到这一点,我创建了IDbContext类。但我不知道如何重写Save和Delete方法,因为我不知道如何编写 db.Partner.AddObject(obj)如何重写这些方法 public interface IDbContext { int SaveChanges(); DbSet<Partner> Partner { get; set; } } public class PartnerR
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();
}
}
}
公共接口IDbContext
{
int SaveChanges();
DbSet伙伴{get;set;}
}
公共类PartnerRepository:IPartnerRepository
{
只读IDbContext _context;
公共存储库()
{
_上下文=(IDbContext)新VOSTOKPortalenties();
}
公共PartnerRepository(IDbContext上下文)
{
_上下文=上下文;
}
公共作废保存(合作伙伴obj)
{
使用(var db=new vostokportalenties())
{
如果(obj.PartnerID==0)
{
db.Partner.AddObject(obj);
}
其他的
{
db.合作伙伴附件(obj);
db.ObjectStateManager.ChangeObjectState(obj,System.Data.EntityState.Modified);
}
db.SaveChanges();
}
}
公共作废删除(合作伙伴obj)
{
使用(var db=new vostokportalenties())
{
db.合作伙伴附件(obj);
db.ObjectStateManager.ChangeObjectState(obj,System.Data.EntityState.Deleted);
db.SaveChanges();
}
}
公共列表GetAll()
{
使用(var db=new vostokportalenties())
{
返回db.Partner.OrderByDescending(i=>i.PartnerID.ToList();
}
}
}
这是测试EF模型的正确方法吗 存储库的单元测试需要花费大量时间,并没有给您带来很多好处。为什么?因为存储库没有复杂的业务逻辑。通常,对底层数据访问API(即ORM)的调用非常简单。我认为最好花时间编写完整的堆栈验收测试,这也将显示您的存储库是否完成了它的工作 顺便说一句,有一个有趣的规则: 通过测试与我们不拥有的类型的模拟版本的交互,我们可以 真的没有使用我们的测试来检查正确的行为,也没有 来推动合作者的设计。我们所做的测试就是 重申我们对另一种类型如何工作的猜测。当然可以,是的 总比不做测试好,但也不一定多
存储库的单元测试需要花费大量时间,并且不会给您带来很多好处。为什么?因为存储库没有复杂的业务逻辑。通常,对底层数据访问API(即ORM)的调用非常简单。我认为最好花时间编写完整的堆栈验收测试,这也将显示您的存储库是否完成了它的工作 顺便说一句,有一个有趣的规则: 通过测试与我们不拥有的类型的模拟版本的交互,我们可以 真的没有使用我们的测试来检查正确的行为,也没有 来推动合作者的设计。我们所做的测试就是 重申我们对另一种类型如何工作的猜测。当然可以,是的 总比不做测试好,但也不一定多