我正在编写测试,以验证一个映射操作,该映射操作采用一个充满SqlDataTypes的大量数据对象,并使用简单的CLR值类型将它们转换为pocos。
这是我到目前为止构建的方法:
private static void CompareValues(string k, Dictionary<string, string> propertyMap, TData sourceDal, TEntity entity)
{
string sourceField = k;
string destField = propertyMap[k];
object sourceval = sourceDal.GetType().GetProperty(sourceField).GetValue(sourceDal, null);
object destval = entity.GetType().GetProperty(destField).GetValue(entity, null);
Assert.AreEqual(sourceval,
destval,
String.Format("Values not equal on fields {0} ({1}) to {2} ({3})",
sourceDal.GetType().GetProperty(sourceField).Name, sourceDal.GetType().GetProperty(sourceField).PropertyType,
entity.GetType().GetProperty(destField).Name, entity.GetType().GetProperty(destField).PropertyType)
);
}不幸的是,在比较SqlInt32和int?时,此方法无法通过测试。sourceval的“值”显示为{74} (具有通常的额外SqlDataType属性的复杂类型),而destval的值显示为74。
我不想让这个方法是类型感知的-我不想让它假设一边是sql类型,另一边不是-因为我的映射测试将在两个方向上传递数据。
我尝试过在SqlInt32上扩展CompareTo
public static int CompareTo(this SqlInt32 sqlInt32, int? value)
public static int CompareTo(this SqlInt32 sqlInt32, int value)但是扩展方法没有被调用(即使在我的测试项目中,intelisense确实正确地检测到了它们)
我是不是找错人了?如何设置SqlDataTypes和CLR值类型之间的通用比较,以产生准确的结果?
发布于 2012-02-07 23:29:19
非常粗糙,一点也不喜欢它,但结果却把它转换成了弦乐作品。
尽管如此,仍然对更好的建议持开放态度。
private static void CompareValues(string k, Dictionary<string, string> propertyMap, TData sourceDal, TEntity entity)
{
string sourceField = k;
string destField = propertyMap[k];
object sourceval = sourceDal.GetType().GetProperty(sourceField).GetValue(sourceDal, null);
string sSource = sourceval.ToString();
object destval = entity.GetType().GetProperty(destField).GetValue(entity, null);
string sDest = destval.ToString();
Assert.AreEqual(sSource,
sDest,
String.Format("Values not equal on fields {0} ({1}) to {2} ({3})",
sourceDal.GetType().GetProperty(sourceField).Name, sourceDal.GetType().GetProperty(sourceField).PropertyType,
entity.GetType().GetProperty(destField).Name, entity.GetType().GetProperty(destField).PropertyType)
);
}https://stackoverflow.com/questions/9177873
复制相似问题