Web API2模拟EF和延迟加载

时间:2014-05-10 14:59:32

标签: c# entity-framework unit-testing lazy-loading asp.net-web-api2

您好,感谢您花时间阅读我的问题。

我是单元测试的新手,并且已经阅读了关于“单元测试ASP.NET Web API 2时模拟实体框架”的文章here。除了需要延迟加载的测试之外,一切正常。

我试图进行单元测试的一些API控制器将实体的投影返回到DTO。由于延迟加载,DTO的某些属性已填充。例如,我有一个具有以下定义的实体Child:

public class Child {
  public Guid Id {get;set;}
  //...other properties
  public Guid ParentId {get;set;}
  [ForeignKey("ParentId")]
  public virtual Parent Parent { get; set; }
}

我的childrenController中的POST方法将新创建的Child Entity的投影返回到ChildViewModel DTO,其中ChildViewModel的定义是:

public class ChildViewModel
{
  public Guid Id { get; set; }
  //...other properties
  public string ParentName{ get; set; }
  public ChildViewModel (Child obj)
  {
    Id = obj.Id;
    //...other properties
    ParentName = obj.Parent.Name;
  }
}

让我感到困惑的是,一切都在现场系统上完美运行。 ParentName属性已正确填充。但是,只要我运行单元测试,Parent属性为null,因此测试失败。

我已经阅读了关于单元测试和模拟EF的广泛内容,但我一直无法找到解决问题的方法。因此,我很欣赏可能导致此行为的一些见解。除了上面提到的文章中描述的内容之外,还有其他的嘲笑我应该实现解决这个问题吗?

值得注意的是:

1- post方法使用方法DBSet.Create()而不是新构造函数来创建新实体,以确保导航属性不为null。

2-所有其他不涉及延迟加载的测试都成功完成。

3-在创建子实体之前,Parent实体存在于测试上下文中。

非常感谢你的帮助。

0 个答案:

没有答案