您好,感谢您花时间阅读我的问题。
我是单元测试的新手,并且已经阅读了关于“单元测试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实体存在于测试上下文中。
非常感谢你的帮助。