Сравнение SqlDataType с обнуляемыми типами CLR в nunit - PullRequest
3 голосов
/ 07 февраля 2012

Я пишу тесты для проверки операции отображения, которая принимает толстый тяжелый объект данных, полный SqlDataTypes, и преобразует их в pocos, используя простые типы значений CLR.

Это метод, который я построил до сих пор:

    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, а другая - нет, потому что мои тесты отображения будут передавать данные в обоих направлениях.

Я пытался расширить CompareTo на SqlInt32

    public static int CompareTo(this SqlInt32 sqlInt32, int? value)
    public static int CompareTo(this SqlInt32 sqlInt32, int value)

но методы расширения не вызываются (хотя intelisense правильно определяет их в моем тестовом проекте)

Я лаю не на том дереве? Как настроить общее сравнение между типами значений SqlDataTypes и CLR, которое дает точные результаты?

1 Ответ

0 голосов
/ 07 февраля 2012

Очень грубо, совсем не нравится, но оказалось, что преобразование значений в строковые значения.

Хотя все еще открыты для лучших предложений.

    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)
            );

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...