我正在尝试使用反射来获取我的POCO中的所有(可设置)属性(现在采用字符串参数,但我计划扩展到其他类型),并将它们设置为任意的。 (我需要确保正确实现.Equals方法。)
我的单元测试中有一些代码看起来像这样(其中t是被测对象,你是该对象的默认版本):
foreach(var property in t.GetType().GetProperties())
{
var setMethod = property.GetSetMethod();
var type = setMethod.GetParameters()[0].GetType();
if(typeof(string).IsAssignableFrom(type))
{
setMethod.Invoke(t, new object[] {"a"});
Assert.IsFalse(t.Equals(u));
Assert.IsFalse(t.GetHashCode() == u.GetHashCode());
}
}
失败的地方是我说typeof(string).IsAssignableFrom(type)
的地方。 if { ... }
块中的代码永远不会运行。我如何正确编写测试的这一部分?
答案 0 :(得分:4)
您将ParameterInfo.GetType()
与ParameterInfo.ParameterType
混为一谈。你应该:
var type = setMethod.GetParameters()[0].ParameterType;
.GetType()
返回当前对象的类型,在本例中为ParameterInfo
,这显然不是您想要的。