Pregunta

He estado tratando de utilizar SubSonic apoyo repositorio de pruebas de 3.0 para las pruebas unitarias pero se encontró con algunos problemas, así que pensé que sí el documento, y las correcciones que hemos llegado con:

Columnas incremento automático no funcionan

Obviamente sin DB, columnas de incremento automático no funcionan automáticamente, pero si como yo que está utilizando enteros simples o anhela para todas las columnas de identidad, esta solución funciona bien:

(Esta es una copia de aquí , incluido para la integridad)

En ActiveRecord.tt:

1: En la parte superior de la función public void Add (proveedor de 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: En la línea TestMode public bool = false, añadir:

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

Objeto Igualdad Comparación está roto

Con la plantilla por defecto ActiveRecord, objetar la igualdad no funciona. Por lo tanto la eliminación de los elementos de la base de datos no funciona ya que la lista <>. Eliminar () utilizado en el TestRepository no coincide con el elemento que se retira. Esto se puede solucionar en las plantillas de TT con lo siguiente: (es decir: la sustitución de "==" con "es igual a ()")

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 no está implementado en el repositorio de pruebas

Operaciones como esta records.Delete(x => x.whatever == whatever) fallan en contra de la cesión temporal prueba porque DeleteMany no está implementado. Fijación para ello es necesario conseguir la fuente y la construcción de uno mismo, pero aquí es una implementación que parece funcionar:

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;
    }
¿Fue útil?

Solución

Gracias por esto - pero lo mejor que puede hacer es decirnos acerca de sus problemas :). StackOverflow es más para responder a las preguntas - que podría sugerir dirigirse a Github y la comprobación de la última fuente (nos hemos fijado un número de éstos). Si ve que algunas cosas pueden ser fijos - los parches son bienvenidos

.

Otros consejos

En cuanto al punto 2, esto sigue siendo roto si el registro no se guarda, ya que está comparando el KeyValue (). Para garantizar que los registros no salvado también tienen la verdadera igualdad, también hay que comprobar si el registro isNew, y si es así, determinar otra estrategia de igualdad

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top