Compartir a través de


Utilizar condiciones de prueba en las pruebas unitarias de base de datos

En una prueba unitaria de base de datos típica, se ejecuta un script de prueba Transact-SQL y se devuelve una instancia de la clase ExecutionResult. La instancia de esta clase contiene un conjunto de datos, el tiempo de ejecución y las filas afectadas por el script. Toda esta información se recopila durante la ejecución del script. Estos resultados se pueden evaluar dentro del script Transact-SQL utilizando la función RAISERROR o se pueden evaluar utilizando las condiciones de prueba. Visual Studio Premium proporciona un conjunto de condiciones de prueba predefinidas para que las utilice.

Condiciones de prueba predefinidas

En la tabla siguiente se incluyen las condiciones de prueba predefinidas que se pueden agregar a través del panel Condiciones de prueba del Diseñador de pruebas unitarias de base de datos.

Condición de prueba

Descripción de la condición de prueba

Suma de comprobación de datos

No se supera si la suma de comprobación del conjunto de resultados devuelto por el script Transact-SQL no coincide con la suma de comprobación esperada. Para obtener más información, vea Especificar una suma de comprobación de datos.

NotaNota
No se recomienda esta condición de prueba si se está devolviendo datos que variarán entre las ejecuciones de pruebas.Por ejemplo, si el conjunto de resultados contiene fechas u horas generadas, o contiene columnas de identidad, se producirá un error en las pruebas porque la suma de comprobación será diferente en cada ejecución.

ResultSet vacío

La prueba no se supera si el conjunto de resultados devuelto del script Transact-SQL no está vacío.

Tiempo de ejecución

La prueba no se supera si el script de prueba Transact-SQL tarda en ejecutarse más tiempo del esperado. El tiempo de ejecución predeterminado es de 30 segundos.

El tiempo de ejecución sólo se aplica a la prueba del script de prueba, no al script de ejecución anterior o posterior a la prueba.

Esquema esperado

No se supera si las columnas y tipos de datos del conjunto de resultados no coinciden con los especificados para la condición de prueba. Debe especificar un esquema a través de las propiedades de la condición de prueba. Para obtener más información, vea Especificar un esquema esperado.

No concluyente

El resultado de la prueba es siempre No concluyente. Ésta es la condición predeterminada que se agrega a todas las pruebas. Esta condición de prueba se incluye para indicar que no se ha implementado la comprobación de la prueba. Cuando haya agregado otras condiciones de prueba, elimine esta condición de prueba.

No se admite ResultSet vacío

La prueba no se supera si el conjunto de resultados está vacío. Puede utilizar esta condición de prueba o EmptyResultSet con la función @@RAISERROR de Transact-SQL en el script de prueba para comprobar si se realizó correctamente una actualización. Por ejemplo, puede guardar los valores previos a la actualización, ejecutar la actualización, comparar los valores posteriores a la actualización y generar un error si no obtiene los resultados esperados.

Recuento de filas

La prueba no se supera si el conjunto de resultados no contiene el número esperado de filas.

Valor escalar

La prueba no se supera si un valor determinado del conjunto de resultados no es igual al valor especificado. La configuración predeterminada de Valor esperado es null.

Nota

La condición de prueba Tiempo de ejecución especifica un límite de tiempo para la ejecución del script de prueba Transact-SQL. Si se excede este límite de tiempo, la prueba no se supera. Los resultados de la prueba también incluyen estadísticas de duración, que no son lo mismo que la condición de prueba Tiempo de ejecución. Las estadísticas de duración no sólo incluyen el tiempo de ejecución, sino que también el tiempo que se ha tardado en establecer una conexión con la base de datos dos veces, el tiempo que han tardado en ejecutarse otros scripts de prueba, como los scripts de ejecución anterior y posterior a la prueba, y el tiempo que han tardado en ejecutarse las condiciones de prueba. Por consiguiente, una prueba se puede superar aunque su duración sea superior a su tiempo de ejecución.

La duración indicada no incluye el tiempo utilizado para la generación de datos y la implementación del esquema, porque ambos procesos son anteriores a la ejecución de las pruebas. Para ver la duración de la prueba, seleccione una ejecución de prueba en la ventana Resultados de pruebas, haga clic con el botón secundario y elija Ver detalles de resultados de la prueba.

Puede agregar condiciones de prueba a las pruebas unitarias de base de datos mediante el panel Condiciones de prueba del Diseñador de pruebas unitarias de base de datos. Para obtener más información, vea Cómo: Agregar condiciones de prueba a pruebas unitarias de base de datos.

También puede editar directamente el código del método de prueba para agregar más funcionalidad. Para obtener más información, vea Cómo: Abrir una prueba unitaria de base de datos para editarla y Cómo: Escribir una prueba unitaria de base de datos que se ejecute en el ámbito de una transacción individual. Por ejemplo, puede agregar funcionalidad a un método de prueba al agregar instrucciones Assert. Para obtener más información, vea Utilizar aserciones Transact-SQL en pruebas unitarias de base de datos.

Errores esperados

Puede crear pruebas unitarias de base de datos para probar comportamientos que no deban tener éxito. Estos errores esperados se conocen a veces como pruebas negativas. Éstos serían algunos ejemplos:

  • Comprobar que un procedimiento almacenado que elimina los datos de un cliente produce un error si se especifica un identificador de cliente no válido

  • Comprobar que un procedimiento almacenado que rellena un pedido produce un error si el pedido nunca se hizo o si ya se rellenó

  • Comprobar que un procedimiento almacenado que cancela un pedido no puede cancelar pedidos completados o pedidos ya cancelados

Puede definir pruebas unitarias de base de datos para procedimientos almacenados que inicien excepciones de SQL esperadas. Puede agregar un atributo al método de prueba unitaria para indicar qué excepción o excepciones se esperan. Al hacerlo así, se evita que la prueba no se supere cuando se produzca la excepción.

Para marcar un método de prueba unitaria de base de datos con excepciones esperadas, agregue el siguiente atributo:

[ExpectedSqlException(MessageNumber = nnnnn, Severity = x, MatchFirstError = false, State = y)]

Donde:

  • nnnnn es el número del mensaje esperado, por ejemplo 14025

  • x es la gravedad de la excepción esperada

  • y es el estado de la excepción esperada

Se omite cualquier parámetro no especificado. Pase estos parámetros a la instrucción RAISERROR en el código de la base de datos. Si especifica MatchFirstError = false, el atributo coincidirá con cualquiera de los errores SqlError de la excepción. El comportamiento predeterminado (MatchFirstError = true) es coincidir solo con el primer error que se produce.

Para ver un ejemplo de cómo utilizar excepciones esperadas y una prueba unitaria de base de datos negativa, vea Tutorial: Crear y ejecutar una prueba unitaria de base de datos.

Especificar una suma de comprobación de datos

Después de agregar una condición de prueba de Suma de comprobación de datos a la prueba unitaria de base de datos, debe configurar la suma de comprobación esperada utilizando el siguiente procedimiento:

Para especificar una suma de comprobación esperada

  1. En la lista de condiciones de prueba, haga clic en la condición de prueba de Suma de comprobación de datos para la que desea especificar una suma de comprobación.

  2. Abra la ventana Propiedades presionando F4. También puede abrir el menú Ver y hacer clic en la ventana Propiedades.

  3. (Opcional) Quizá desee desear cambiar la propiedad (Nombre) de la condición de prueba para que sea más descriptiva.

  4. En la propiedad Configuración, haga clic en el botón de exploración (...).

    Aparece el cuadro de diálogo Configuración para TestConditionName.

  5. Especifique una conexión a la base de datos que desea probar. Para obtener más información, vea Cómo: Crear una conexión a una base de datos.

  6. De forma predeterminada, el cuerpo Transact-SQL de la prueba aparece en el recuadro de edición. Puede modificar el código, si es necesario, para generar los resultados esperados. Por ejemplo, si la prueba tiene código en la prueba previa, quizá tenga que agregar ese código.

    Nota importanteImportante

    Si modifica una condición de suma de comprobación para la que haya especificado previamente una suma de comprobación, los cambios que haga en el recuadro de edición no se guardarán. Debe hacer esas modificaciones de nuevo antes de hacer clic en Recuperar.

  7. Haga clic en Recuperar.

    El Transact-SQL se ejecuta contra la conexión de base de datos especificada y los resultados aparecen en el cuadro de diálogo.

  8. Si los resultados coinciden con los resultados esperados de la prueba, haga clic en Aceptar. De lo contrario modifique el cuerpo Transact-SQL y repita los pasos 6, 7 y 8 hasta que los resultados sean los esperados.

    La columna Valor de la condición de prueba muestra el valor de la suma de comprobación esperada.

Especificar un esquema esperado

Después de agregar una condición de prueba de Esquema esperado a la prueba unitaria de base de datos, debe configurar el esquema esperado utilizando el siguiente procedimiento:

Para especificar un esquema esperado

  1. En la lista de condiciones de prueba, haga clic en la condición de prueba de Esquema esperado para la que desea especificar un esquema.

  2. Abra la ventana Propiedades presionando F4. También puede abrir el menú Ver y hacer clic en la ventana Propiedades.

  3. (Opcional) Quizá desee desear cambiar la propiedad (Nombre) de la condición de prueba para que sea más descriptiva.

  4. En la propiedad Configuración, haga clic en el botón de exploración (...).

    Aparece el cuadro de diálogo Configuración para TestConditionName.

  5. Especifique una conexión a la base de datos que desea probar. Para obtener más información, vea Cómo: Crear una conexión a una base de datos.

  6. De forma predeterminada, el cuerpo Transact-SQL de la prueba aparece en el recuadro de edición. Puede modificar el código, si es necesario, para generar los resultados esperados. Por ejemplo, si la prueba tiene código en la prueba previa, quizá tenga que agregar ese código.

    Nota importanteImportante

    Si modifica una condición de esquema esperado para la que haya especificado previamente un esquema, los cambios que realice en el recuadro de edición no se guardarán. Debe hacer esas modificaciones de nuevo antes de hacer clic en Recuperar.

  7. Haga clic en Recuperar.

    El Transact-SQL se ejecuta contra la conexión de base de datos especificada y los resultados aparecen en el cuadro de diálogo. Dado que está comprobando el esquema, o la forma, del conjunto de resultados y no los valores de los resultados, no tiene que ver ningún dato en los resultados devueltos, con tal de que las columnas aparezcan de la manera que se espera que aparezcan.

  8. Si los resultados coinciden con los resultados esperados de la prueba, haga clic en Aceptar. De lo contrario modifique el cuerpo Transact-SQL y repita los pasos 6, 7 y 8 hasta que los resultados sean los esperados.

    La columna Valor de la condición de prueba muestra información sobre el esquema esperado. Por ejemplo, podría decir "Esperado: 2 tablas".

Extensibilidad de las condiciones de prueba

Además de las seis condiciones de prueba predefinidas, puede escribir condiciones de prueba nuevas. Estas condiciones de prueba se mostrarán en el panel Condiciones de prueba del Diseñador de pruebas unitarias de base de datos. Para obtener más información, vea Cómo: Crear condiciones de prueba para el Diseñador de pruebas unitarias de base de datos.

Vea también

Conceptos

Utilizar aserciones Transact-SQL en pruebas unitarias de base de datos

Scripts en pruebas unitarias de base de datos