Pregunta

[Editar (Haren): Duplicar ]

Estoy buscando una manera de envolver automáticamente mis pruebas de integración NUnit en una transacción de base de datos, para que los cambios realizados por la prueba se reviertan automáticamente cuando finaliza la prueba. Idealmente, decoraría ciertos métodos de prueba con un atributo personalizado que haría que NUnit creara una transacción cuando se inicia la prueba y la deshace cuando finaliza la prueba ... Puedo escribir el atributo, pero no sé dónde agregar un cheque para ello.

El DB de prueba tiene un tamaño de 3 GB, por lo que restaurarlo al inicio de cada prueba no es una opción. Sé que puedo crear manualmente una transacción en el cuerpo de cada prueba, pero estoy buscando algo más elegante.

¿Quizás hay una herramienta de reescritura de IL (un marco AOP, tal vez) que puede hacer esto por mí? ¿Alguien tiene alguna sugerencia?

¿Fue útil?

Solución

Hay dos recomendaciones. La primera es usar los atributos SetUp y TearDown para iniciar la transacción y revertirla cuando haya terminado. La documentación para hacerlo en NUnit está aquí:

http://www.nunit.org/index.php ? p = configuración & amp; r = 2.4.8

Si no desea usar eso, la otra opción que veo es codificarlo en todos los métodos, pero usar una instancia de TransactionScope en una declaración usando para crear la transacción (el proveedor debería enlistarse automáticamente).

Por supuesto, también puede crear la instancia de TransactionScope en los métodos SetUp y TearDown.

Otros consejos

¿No va a tener problemas con las transacciones anidadas aquí? Como entiendo, la mayoría de los DB no admiten transacciones dentro de transacciones. Entonces, si el código bajo prueba utiliza transacciones (creo que si usas una base de datos que admita transacciones, las usarías), entonces lo que realmente deseas son las transacciones anidadas, que (me han dicho) la mayoría Las bases de datos no son compatibles directamente.

Spring.net?

Vengo de un fondo Java / JUnit, pero sé que en Java puedes hacerlo usando Springframework.

(También deberá obtener su prueba de ApplicationContext / BeanFactory para aplicar AOP).

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