Aquí podría ser tu PUBLICIDAD


¿Cómo pruebo la persistencia de la unidad?

votos
43

Como novato en la práctica del desarrollo basado en pruebas, a menudo termino en un dilema sobre cómo probar la persistencia de la prueba en una base de datos.

Sé que técnicamente esto sería una prueba de integración (no una prueba de unidad), pero quiero descubrir las mejores estrategias para lo siguiente:

  1. Prueba de consultas.
  2. Inserciones de prueba. ¿Cómo sé que la inserción que salió mal si falla? Puedo probarlo insertando y luego consultando, pero ¿cómo puedo saber que la consulta no fue incorrecta?
  3. Prueba de actualizaciones y eliminaciones, al igual que las inserciones de prueba

¿Cuáles son las mejores prácticas para hacer esto?


En cuanto a probar SQL: soy consciente de que esto podría hacerse, pero si utilizo un O / R Mapper como NHibernate, adjunta algunas verrugas de nomenclatura en los alias utilizados para las consultas de salida, y como eso es algo impredecible, no estoy seguro Podría probar eso.

¿Debería simplemente abandonar todo y simplemente confiar en NHibernate? No estoy seguro de que sea prudente.

Publicado el 05/08/2008 a las 10:43
fuente por usuario Jon Limjap
En otros idiomas...        العربية       

10 respuestas

votos
16

Mire en la unidad DB. Es una biblioteca de Java, pero debe haber un equivalente de C #. Le permite preparar la base de datos con un conjunto de datos para que sepa qué hay en la base de datos, luego puede interactuar con DB Unit para ver qué hay en la base de datos. Se puede ejecutar contra muchos sistemas de bases de datos, por lo que puede usar su configuración de base de datos real, o usar algo más, como HSQL en Java (una implementación de base de datos Java con una opción en memoria).

Si desea probar que su código está usando la base de datos correctamente (lo que probablemente debería estar haciendo), entonces esta es la forma de aislar cada prueba y asegurarse de que la base de datos tenga preparados los datos esperados.

Respondida el 11/08/2008 a las 10:40
fuente por usuario Mike Stone


Aquí podría ser tu PUBLICIDAD


votos
15

Como dijo Mike Stone , DbUnit es ideal para llevar la base de datos a un estado conocido antes de ejecutar tus pruebas. Cuando terminen sus pruebas, DbUnit puede volver a poner la base de datos en el estado en que se encontraba antes de ejecutar las pruebas.

DbUnit (Java)

DbUnit.NET

Respondida el 25/08/2008 a las 02:22
fuente por usuario Josh Brown

votos
4

Usted hace las pruebas unitarias burlándose de la conexión de la base de datos. De esta forma, puede crear escenarios donde las consultas específicas en el flujo de una llamada a método tienen éxito o fallan. Normalmente construyo mis expectativas simuladas para que se ignore el texto de la consulta real, porque realmente quiero probar la tolerancia a fallas del método y cómo se maneja a sí mismo; las especificaciones del SQL son irrelevantes para ese fin.

Obviamente, esto significa que su prueba en realidad no verificará si el método funciona , porque el SQL puede estar equivocado. Aquí es donde entran en juego las pruebas de integración. Por eso, espero que alguien más tenga una respuesta más completa, ya que estoy empezando a familiarizarme con ellos.

Respondida el 05/08/2008 a las 10:47
fuente por usuario Rytmis

votos
3

He escrito una publicación aquí en relación con la prueba unitaria de la capa de datos que cubre este problema exacto. Disculpas por el (vergonzoso) complemento, pero el artículo es demasiado largo para publicar aquí.

Espero que eso te ayude, me ha funcionado muy bien durante los últimos 6 meses en 3 proyectos activos.

Saludos,

Rob G

Respondida el 13/08/2008 a las 12:23
fuente por usuario RobertTheGrey

votos
2

Para proyectos basados JDBC, marco Acólito se puede utilizar: http://acolyte.eu.org . Permite el acceso maqueta datos que desea pruebas, que se benefician de la abstracción JDBC, sin tener que gestionar una base de datos de prueba específico.

Respondida el 09/07/2014 a las 10:20
fuente por usuario cchantep

votos
2

Porque NHibernate, definitivamente, abogo por burlarme de las NHibernate APIpruebas unitarias, confío en que la biblioteca hará lo correcto. Si desea asegurarse de que los datos realmente vayan al DB, realice una prueba de integración.

Respondida el 05/08/2008 a las 12:20
fuente por usuario Rytmis

votos
2

El problema que experimenté cuando la persistencia de las pruebas unitarias, especialmente sin un ORM y por lo tanto burlando de su base de datos (conexión), es que realmente no sabe si sus consultas tienen éxito. Puede ser que sus consultas estén específicamente diseñadas para una versión de base de datos particular y solo tengan éxito con esa versión. Nunca lo sabrás si te burlas de tu base de datos. Entonces, en mi opinión, la persistencia de las pruebas unitarias solo tiene un uso limitado. Siempre debe agregar pruebas que se ejecutan en la base de datos de destino.

Respondida el 05/08/2008 a las 11:29
fuente por usuario dlinsin

votos
1

Normalmente creo un repositorio y lo uso para guardar mi entidad, luego recupero uno nuevo. Entonces afirmo que el recuperado es igual al guardado.

Respondida el 27/08/2008 a las 10:17
fuente por usuario Thomas Eyde

votos
1

Técnicamente las pruebas unitarias de persistencia no son pruebas unitarias, son pruebas de integración.

Con C # usando mbUnit, simplemente usa los atributos SqlRestoreInfo y RollBack

    [TestFixture]
    [SqlRestoreInfo(<connectionsting>, <name>,<backupLocation>]
    public class Tests
    {

        [SetUp]
        public void Setup()
        {

        }

        [Test]
        [RollBack]
        public void TEST()
        {
           //test insert. 
        }
    }

Lo mismo se puede hacer en NUnit, excepto que los nombres de los atributos difieren ligeramente.

En cuanto a verificar si su consulta fue exitosa, normalmente debe seguirla con una segunda consulta para ver si la base de datos ha sido modificada como esperaba.

Respondida el 05/08/2008 a las 12:27
fuente por usuario Dan

votos
1

También me burlaría de la base de datos y verificaría que las consultas sean las esperadas. Existe el riesgo de que la prueba verifique el SQL incorrecto, pero esto se detectaría en las pruebas de integración

Respondida el 05/08/2008 a las 11:19
fuente por usuario David Sykes


Aquí podría ser tu PUBLICIDAD