【问题标题】:test Entity Framework Models测试实体框架模型
【发布时间】:2012-07-23 05:36:45
【问题描述】:

我要测试我的 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();
        }
    }
}

这是测试 EF 模型的正确方法吗?

【问题讨论】:

    标签: c# entity-framework unit-testing repository


    【解决方案1】:

    对存储库进行单元测试需要花费大量时间,并且不会给您带来很多好处。为什么?因为存储库没有复杂的业务逻辑。通常对底层数据访问 API(即 ORM)有非常简单的调用。我认为花时间编写全栈验收测试比较合适,这也将显示您的存储库是否完成了它的工作。

    顺便说一句,有一个有趣的规则Don't Mock what you don't own

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2011-08-28
      • 2013-10-17
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      相关资源
      最近更新 更多