使用 Entity Framework 对 Put 进行单元测试

Unit Testing a Put With Entity Framework

我正在尝试通过检查值来对 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).StateMarkAsModified 方法中设置为 EntityState.Modified,然后保存更改。我如何在我的测试上下文中模拟它,以便 DbSet 反映来自 PUT 请求的更改?

我已经做到了:

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

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

  }
}

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

两条记录都在变量 id 上标识,该变量是 int.

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