Question

J'ai essayé d'utiliser SubSonic support du référentiel de test de 3,0 pour les tests unitaires, mais rencontrais quelques questions, donc je pensais que je les documents, et les corrections que je suis venu avec:

Colonnes auto-increment ne fonctionnent pas

Il est évident que sans DB, les colonnes auto-incrément ne fonctionnent pas automatiquement, mais si comme moi vous utilisez ints simples ou désire ardemment pour toutes les colonnes d'identité, ce correctif fonctionne bien:

(Ceci est une copie de ici , inclus pour être complet)

En ActiveRecord.tt:

1: Dans la partie supérieure de la fonction public void Ajouter (fournisseur 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: Dans la ligne bool = false publique TestMode, ajouter:

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

Objet égalité Comparaison est cassé

En utilisant le modèle par défaut ActiveRecord, objet égalité ne fonctionne pas. Donc, la suppression des éléments de la base de données ne fonctionne pas depuis la liste <>. Remove () utilisé dans le TestRepository ne correspond pas à l'élément supprimé. Cela peut être corrigé dans les modèles de tt ce qui suit: (ex: remplacer « == » avec « equals () »)

En 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 est pas défini dans le référentiel de test

Opérations comme celui-ci ne records.Delete(x => x.whatever == whatever) contre le repo de test car DeleteMany n'est pas mis en œuvre. Fixation cela nécessite d'obtenir la source et construire vous-même, mais voici une implémentation qui semble fonctionner:

En TestRepository.cs:

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

La solution

Merci pour cela - mais la meilleure chose à faire est de nous faire part de vos questions :). StackOverflow est plus pour répondre à des questions - je pourrais suggérer de se diriger vers Github et vérifier la dernière source (nous avons fixé un certain nombre de ceux-ci). Si vous voyez que certaines choses peuvent être fixes - patches sont bienvenus

.

Autres conseils

En ce qui concerne le point 2, cela est encore cassé si l'enregistrement est pas encore enregistré, car il compare le KeyValue (). Pour faire en sorte que les dossiers non sauvés ont aussi une véritable égalité, il faut aussi vérifier si le dossier ISNEW, et le cas échéant, déterminer une autre stratégie d'égalité

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top