有人会认为这应该是微不足道的。但是,我必须做错事,而我却无法理解。
作为WebAPI2项目的一部分,我有一个简单的接口IDefaultView
public class IDefaultView
{
public Guid Id { get; set; }
//....other properties
}
以及实现此接口的类View。
public class View : IDefaultView
{
public string Description { get; set; }
public View(MyObject obj)
{
Id = obj.Id;
//....other properties
Description = obj.Description;
}
}
View Class实际上是API控制器使用的DTO。
我目前正在尝试各种解决方案来执行API控制器单元测试,其中包括创建BaseTestClass
。 BaseTestClass的简化轮廓如下所示。
public class BaseTestClass<entityViewClass> where entityViewClass : IDefaultView
{
public void Method1 ()
{
//...stripped out code
//controller below is a reference to the controller, whose addNew(item) method results in a CreatedAtRouteNegotiatedContentResult<View> object.
var result = controller.addNew(item) as CreatedAtRouteNegotiatedContentResult<entityViewClass>;
string newDescription = GetPropertyValue(result.Content, "Description").ToString ();
//...stripped out code
}
public object GetPropertyValue(object obj, string propertyName)
{
var objType = obj.GetType();
var prop = objType.GetProperty(propertyName);
return prop.GetValue(obj, null);
}
}
我在使用反射访问Description
属性时遇到了一些我无法理解的行为,因为它从未被分配到newDescription
变量。
我在GetPropertyValue(result.Content, "Description").ToString ()
添加了一个断点和一个监视,它显示了正确的属性值。但是,newDescription
变量永远不会被设置。监视窗口甚至显示:当前上下文中不存在名称“newDescription”。
我最初认为这与接口定义不包含Description
属性这一事实有关,但Description
属性可由手表确认访问。
我错过了什么?如果有任何人遇到同样的问题或对发生的事情有任何想法,我将不胜感激。
谢谢!