1

我要测试我的 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 模型的正确方法吗?

4

1 回答 1

4

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

顺便说一句,有一个有趣的规则不要嘲笑你不拥有的东西

通过测试与我们不拥有的模拟版本的交互,我们实际上并没有使用我们的测试来检查正确的行为,也没有驱逐合作者的设计。我们所做的所有测试都是重复我们对其他类型如何工作的猜测。当然,总比没有测试好,但不一定要好得多。

于 2012-07-23T08:25:43.723 回答