Domanda

Ho cercato di utilizzare SubSonic supporto repository di test 3.0 per unit testing, ma incontrato alcuni problemi, così ho pensato di loro mi documento, e le correzioni che è venuta in mente:

Colonne incremento automatico non funzionano

Ovviamente senza DB, colonne incremento automatico non funzionano automaticamente, ma se come me si sta utilizzando interi semplici o long per tutte le colonne di identità, questa correzione funziona bene:

(Questa è una copia da qui , incluso per completezza)

In ActiveRecord.tt:

1: In cima alla public void funzione di Aggiungi (fornitore 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: Sotto la linea public bool TestMode = false, aggiungere:

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

Oggetto uguaglianza di confronto è rotto

Utilizzando il modello di ActiveRecord di default, un oggetto uguaglianza non funziona. Quindi rimuovere elementi dalla DB non funziona in quanto il List <>. Togliere () utilizzato nella TestRepository non riesce ad abbinare l'elemento viene rimosso. Questo può essere risolto nei modelli TT con la seguente: (es: sostituire "==" con "Equals ()")

In 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 non è implementato nel repository di test

Operazioni come questa records.Delete(x => x.whatever == whatever) falliscono contro il repo test perché DeleteMany non è implementata. Fissare questo richiede sempre l'origine e la costruzione di se stessi, ma qui è un'implementazione che sembra funzionare:

In TestRepository.cs:

    public int DeleteMany(Expression<Func<T, bool>> expression)
    {
        foreach (var x in _items.AsQueryable().Where(expression).ToList())
        {
            _items.Remove(x);
        }
        return 0;
    }
È stato utile?

Soluzione

Grazie per questo - ma la cosa migliore da fare è quello di raccontarci i vostri problemi :). StackOverflow è più per rispondere alle domande - Potrei suggerire di dirigersi verso Github e controllando l'ultima fonte (abbiamo risolto un certo numero di questi). Se si vede che alcune cose possono essere fissati - patch sono i benvenuti

.

Altri suggerimenti

Per quanto riguarda il punto 2, questo è ancora rotto, se il record non è ancora stato salvato, in quanto è il confronto sulle KeyValue (). Per garantire che i record non salvati hanno anche una vera parità, dobbiamo anche verificare se il record isNew, e in caso affermativo, determinare un'altra strategia per la parità

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top