使用实体框架测试单元的单元

时间:2015-02-20 23:23:53

标签: c# .net unit-testing dbcontext put

我试图通过检查值来对PUT请求进行单元测试。但是,我遇到了一个简单的问题。我有一个像这样的测试环境:

class TestAppContext : ContextInterface
{

        public DbSet<User> Users {get; set;}
        public DbSet<Request> Requests { get; set; }

        public TestAppContext()
        {
            this.Users = new TestUsersDbSet();
            this.Requests = new TestRequestsDbSet();
        }

        public int SaveChanges(){
            return 0;
        }
        public void MarkAsModified(Object item) {

        }

        public void Dispose() { }     
}

当使用DbContext运行PUT时,Entry(item).State方法中的EntityState.Modified设置为MarkAsModified,然后更改保存的更改。如何在我的测试上下文中模拟这个,以便DbSet反映PUT请求的变化?

我已经做到了这一点:

public void MarkAsModified(Object item) {
  if (item.GetType() == typeof(User))
  {

  }
  else if (item.GetType() == typeof(Request))
  {

  }
}

这样我就可以确定要修改的内容,但是如何将更改实际保存到该记录的DbSet中呢?

两个记录都在变量id上标识,int

1 个答案:

答案 0 :(得分:2)

在测试环境中,只需保留List<Object> markedAsModified字段,然后在调用MarkAsModified时将对象添加到该列表中(如果它尚未存在)。然后在您的测试中,您可以使用Assert语句检查该列表的内容,以确保将正确的对象传递给该函数。