Frage

Ich habe versucht, die Test -Repository -Unterstützung von SubSonic 3.0 für Unit -Tests zu verwenden, aber ein paar Probleme, also dachte ich, ich dokumentiere sie und die Korrekturen, die ich mir vorgestellt habe:

Automatische Inkrementspalten funktionieren nicht

Offensichtlich funktionieren die automatischen Inkrement-Spalten ohne DB nicht automatisch, aber wenn Sie wie ich einfache INTs verwenden oder sich nach allen Identitätsspalten sehnt, funktioniert diese Fix gut:

(Dies ist eine Kopie von hier, zur Vollständigkeit enthalten)

In activerecord.tt:

1: Oben in der Funktion public void add (idataprovider -Anbieter) {

        public void Add(IDataProvider provider){

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

<#}#>

2: Unter der Linie Public bool testMode = false, fügen Sie hinzu:

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

Der Vergleich der Objektgleichheit ist gebrochen

Unter Verwendung der Standard -ActiveCord -Vorlage funktioniert die Objektgleichheit nicht. Das Entfernen von Elementen aus der DB funktioniert also nicht, da die im Testrepository verwendete Liste <>. REMED () nicht mit dem zu entfernenden Element übereinstimmt. Dies kann in den TT -Vorlagen mit Folgendem fixiert werden: (dh ersetzt "==" durch "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 wird im Test -Repository nicht implementiert

Operationen wie diese records.Delete(x => x.whatever == whatever) Versagen Sie gegen das Test -Repo, da das Deletemany nicht umgesetzt wird. Wenn Sie dies beheben, müssen Sie die Quelle erhalten und sich selbst aufbauen, aber hier ist eine Implementierung, die zu funktionieren scheint:

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;
    }
War es hilfreich?

Lösung

Vielen Dank dafür - aber das Beste, was Sie tun können, ist, uns über Ihre Probleme zu erzählen :). Stackoverflow ist mehr zur Beantwortung von Fragen gedacht - ich könnte vorschlagen, zu GitHub zu gehen und die neueste Quelle zu überprüfen (wir haben einige davon behoben). Wenn Sie sehen, dass einige Dinge repariert werden können - sind Patches sehr willkommen.

Andere Tipps

In Bezug auf Punkt 2 ist dies immer noch kaputt, wenn der Datensatz noch nicht gespeichert ist, da er auf KeyValue () verglichen wird. Um sicherzustellen, dass nicht-saspurische Aufzeichnungen auch eine wahre Gleichheit haben, müssen wir auch testen, ob der Datensatz ist und in diesem Fall eine andere Gleichstellungsstrategie bestimmen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top