sql-server - migrar - migración de microsoft sql server a postgresql
¿Cómo pruebo las migraciones de base de datos? (6)
¿Pruebas tu DAL - algún tipo de prueba de integración?
Necesita más que un script de migración, también necesita un script de línea de base. Cuando desee probar una actualización de la base de datos, debe ejecutar todos los scripts desde la línea de base en un servidor de prueba / ensayo para crear la versión más nueva de la base de datos. Luego, prueba tu DAL con la base de datos de prueba actualizada. Si todas las pruebas DAL tienen éxito, entonces su migración debería haber tenido éxito (de lo contrario, sus pruebas DAL no serán lo suficientemente completas).
Es una prueba costosa de ejecutar, pero es bastante sólida. Personalmente admitiré hacer mucho de esto manualmente en este momento; tenemos una herramienta de migración interna que aplicará todos los scripts (incluida la línea de base), por lo que la configuración de la base de datos de prueba y las pruebas DAL son pasos separados. Aunque funciona Si desea asegurarse de que se haya creado una tabla, ¡no hay mejor método que intentar insertar datos en ella!
Puede intentar verificar los resultados mirando los catálogos del sistema y las vistas de INFORMATION_SCHEMA
y así sucesivamente, pero en última instancia, la única forma de asegurarse de que realmente funciona es intentar usar los nuevos objetos. El hecho de que los objetos estén allí no significa que sean funcionales.
Estoy usando Migrator.NET para escribir migraciones de base de datos para la aplicación. Marc-André Cournoyer escribió:
Al igual que cualquier código en su aplicación, debe probar sus migraciones. Código de altibajos. Hágalo parte de su proceso continuo de construcción y pruébelo en tantas bases de datos y entornos diferentes como pueda.
¿Cómo puedo hacer eso? Supongamos que tengo el método Up () que crea una tabla y el método Down () que elimina la misma tabla y estoy usando SQL Server. ¿Cómo se vería una prueba? ¿Debería estar ejecutando una consulta SQL en las tablas del sistema, como select * from sys.columns
, para verificar si la tabla se creó y si tiene la estructura adecuada? ¿Qué pasa si estamos usando NHibernate?
EDITAR Me refiero a las migraciones en el sentido de las migraciones de Rails ActiveRecord (crear, modificar y demoler bases de datos en pequeños pasos según el código C #).
EDIT 2 Y here es donde leo sobre esto, deberíamos probar las migraciones. La publicación del blog está realmente enlazada desde la wiki de Migrator.
El control de código fuente es para tomar una instantánea de su base de código actual. La migración es para mover el cambio de su base de datos de una versión a la siguiente. Para que en algún momento futuro pueda tomar una base de datos antigua, aplicar migraciones y trabajar con la última base de código.
Nunca he visto las migraciones reales probadas. He visto los resultados probados, y me han atrapado / recordado para ejecutar las últimas migraciones.
describe User do
it { should have_column :name, :type => :string }
it { should validate_presence_of :name}
end
Entonces alguien cambia el modelo. Agrega una prueba para reflejar el modelo. Agrega la migración. Entonces comete la fuente.
Agarra lo último, ejecuta pruebas. Las pruebas fallan porque la base de datos no corresponde. Recuerda ejecutar las migraciones y luego volver a ejecutar las pruebas. Éxito.
Estoy buscando una respuesta a esto también. Creo que esto debería probarse en un entorno de integración en lugar de en una prueba unitaria: para pruebas unitarias (DAL) descarto la base de datos y la vuelvo a crear.
Sin embargo, lo ideal sería tener un entorno de integración en el que mi base de datos se replique desde la producción y los scripts de migración de la base de datos se ejecuten en ambos sentidos: hacia arriba para garantizar una actualización sin problemas de la producción y hacia abajo para asegurar que sea posible realizar reversiones.
PODRÍA hacer una comparación de los objetos del sistema de la base de datos, pero tendría que tener un objetivo con el cual comparar. De lo contrario, ¿cómo sabría si se pasa o falla?
Creo que sería mejor crear un conjunto de casos de prueba de operación CRUD de caso perimetral que ejercen las entidades u operaciones en la capa de datos. Si alguno de estos falla, la base de datos no está sincronizada con lo que se requiere. es decir, si la inserción de un campo char (20) falla porque es solo char (15) en la base de datos. Luego se puede hacer la comparación de la estructura db para ver qué pasa si está desactivado.
Es posible que pueda provocar un cortocircuito en esto al enfocarse solo en los elementos recientemente modificados y suponiendo que se hayan aplicado cambios anteriores.
Tal vez este script te pueda ayudar:
http://www.benzzon.se/forum/uploads/benzzon/2006-03-27_134824_sp_CompareDB.txt
este script compara dos db. (estructura y datos)
Trate las pruebas de migración como parte de su estrategia general de pruebas de persistencia si usa NHibernate, es decir, si puede crear y guardar todas sus entidades sin errores, su base de datos y sus asignaciones deben ser correctas.