Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试实体框架模型_C#_Entity Framework_Unit Testing_Repository - Fatal编程技术网

C# 测试实体框架模型

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

我要测试我的EF模型。为了做到这一点,我创建了IDbContext类。但我不知道如何重写Save和Delete方法,因为我不知道如何编写 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();
        }
    }
}
公共接口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)的调用非常简单。我认为最好花时间编写完整的堆栈验收测试,这也将显示您的存储库是否完成了它的工作

顺便说一句,有一个有趣的规则:

通过测试与我们不拥有的类型的模拟版本的交互,我们可以 真的没有使用我们的测试来检查正确的行为,也没有 来推动合作者的设计。我们所做的测试就是 重申我们对另一种类型如何工作的猜测。当然可以,是的 总比不做测试好,但也不一定多