首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较nunit中的SqlDataType和CLR可空类型

比较nunit中的SqlDataType和CLR可空类型
EN

Stack Overflow用户
提问于 2012-02-07 22:20:02
回答 1查看 144关注 0票数 3

我正在编写测试,以验证一个映射操作,该映射操作采用一个充满SqlDataTypes的大量数据对象,并使用简单的CLR值类型将它们转换为pocos。

这是我到目前为止构建的方法:

代码语言:javascript
复制
    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

代码语言:javascript
复制
    public static int CompareTo(this SqlInt32 sqlInt32, int? value)
    public static int CompareTo(this SqlInt32 sqlInt32, int value)

但是扩展方法没有被调用(即使在我的测试项目中,intelisense确实正确地检测到了它们)

我是不是找错人了?如何设置SqlDataTypes和CLR值类型之间的通用比较,以产生准确的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-07 23:29:19

非常粗糙,一点也不喜欢它,但结果却把它转换成了弦乐作品。

尽管如此,仍然对更好的建议持开放态度。

代码语言:javascript
复制
    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)
            );

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9177873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档