Исправление для проблем с тестовым разрешением дозвуковой 3

StackOverflow https://stackoverflow.com/questions/2454889

Вопрос

Я пытался использовать поддержку тестового хранилища дозвукового 3.0 для тестирования модуля, но столкнулся с несколькими проблемами, поэтому я подумал, что документирую их, и исправления, которые я придумал:

Колонны автоматического ввода не работают

Очевидно, что без DB, столбцы автоматического ввода не работают автоматически, но если я, как и я

(Это копия из здесь, включено для полноты)

В activerecord.tt:

1: В верхней части функции public void add (поставщик idataprovider) {

        public void Add(IDataProvider provider){

<#if(tbl.PK.SysType=="long" || tbl.PK.SysType=="int") {#>
            if (TestMode)
            {
                this.<#=tbl.PK.CleanName#>=++next_test_autoid;
            }

<#}#>

2: под строкой Public Bool TestMode = false, добавьте:

        public bool TestMode = false;
<#if(tbl.PK.SysType=="long" || tbl.PK.SysType=="int") {#>
        private static <#=tbl.PK.SysType#> next_test_autoid = 0;
<#}#>

Сравнение равенства объекта сломано

Используя шаблон ActiveRecord по умолчанию, равенство объекта не работает. Таким образом, удаление элементов из DB не работает, поскольку список <>. Remove (), используемый в тестопозитории, не соответствует удалению элемента. Это может быть исправлено в шаблонах TT со следующим: (т.е. замена "==" на "Equals ()")

В activerecord.tt:

    public override bool Equals(object obj){
        if(obj.GetType()==typeof(<#=tbl.ClassName#>)){
            <#=tbl.ClassName#> compare=(<#=tbl.ClassName#>)obj;
            return compare.KeyValue().Equals(this.KeyValue());
        }else{
            return base.Equals(obj);
        }
    }

DeleteMany не реализован в тестовом хранилище

Такие операции records.Delete(x => x.whatever == whatever) Не удалось против тестового репо, потому что Deletemany не реализован. Исправление этого требует получения источника и создания себя, но вот реализация, которая, кажется, работает:

В testRepository.cs:

    public int DeleteMany(Expression<Func<T, bool>> expression)
    {
        foreach (var x in _items.AsQueryable().Where(expression).ToList())
        {
            _items.Remove(x);
        }
        return 0;
    }
Это было полезно?

Решение

Спасибо за это - но лучше всего рассказать нам о ваших проблемах :). Stackoverflow - это больше для ответа на вопросы - я мог бы предложить отправиться в GitHub и проверить последний источник (мы исправили несколько из них). Если вы видите, что некоторые вещи могут быть исправлены - патчи очень приветствуются.

Другие советы

Что касается точки 2, это все еще нарушено, если запись еще не сохранена, поскольку она сравнивается на keyvalue (). Чтобы обеспечить, чтобы записи, не связанные, также имели истинное равенство, мы также должны проверить, если запись-это, и если это так, определите другую стратегию равенства

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top