Share via


Usar condiciones de prueba en pruebas unitarias de SQL Server

 

En una prueba unitaria de SQL Server se ejecutan uno o varios scripts de prueba Transact-SQL. Los resultados se pueden evaluar dentro del script Transact-SQL y usar THROW o RAISERROR para devolver un error y que no se supere la prueba, o se pueden definir condiciones de prueba en la prueba para evaluar los resultados. La prueba devuelve una instancia de la clase SqlExecutionResult. La instancia de esta clase contiene uno o más DataSets, 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 utilizando las condiciones de prueba.SQL Server Data Tools proporciona un conjunto de condiciones de prueba predefinidas. También puede crear y usar condiciones personalizadas; vea Condiciones de prueba personalizadas para pruebas unitarias de SQL Server.

Condiciones de prueba predefinidas

En la tabla siguiente se enumeran las condiciones de prueba predefinidas que puede agregar mediante el panel Condiciones de prueba del Diseñador de pruebas unitarias de SQL Server.

Condición de prueba Descripción de la condición de prueba
Suma de comprobación de datos Se produce un error si la suma de comprobación del conjunto de resultados devuelto del 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. Note: Esta condición de prueba no se recomienda si va a devolver datos que varían entre las series de pruebas. Por ejemplo, si el conjunto de resultados contiene fechas u horas de salida, o contiene columnas de identidad, las pruebas producirán un error porque la suma de comprobación será diferente en cada ejecución.
Conjunto de resultados vacío Se produce un error si el conjunto de resultados devuelto script Transact-SQL no está vacío.
Tiempo de ejecución Se produce un error si el script de prueba Transact-SQL lleva más tiempo del esperado en ejecutarse. El tiempo de ejecución predeterminado es de 30 segundos.

El tiempo de ejecución se aplica únicamente a la prueba de script de prueba, no al script anterior a la prueba ni al script posterior a la prueba.
Esquema esperado Se produce un error si las columnas y los tipos de datos del conjunto de resultados no coinciden con los especificados para la condición de prueba. Debe especificar un esquema mediante las propiedades de la condición de prueba. Para obtener más información, vea Especificar un esquema esperado.
No concluyente Siempre genera una prueba con un resultado de No concluyente. Esta es la condición predeterminada agregada a cada prueba. Esta condición de prueba se incluye para indicar que la comprobación de la prueba no se ha implementado. Elimine esta condición de prueba de la prueba después de agregar otras condiciones de prueba.
No se admite ResultSet vacío Se produce un error si el conjunto de resultados está vacío. Puede usar esta condición de prueba o EmptyResultSet con la función @@RAISERROR de Transact-SQL en el script de prueba para comprobar si una actualización funcionó correctamente. Por ejemplo, puede guardar los valores anteriores a la actualización, ejecutar la actualización, comparar los valores posteriores a la actualización y generar un error si no se obtienen los resultados esperados.
Recuento de filas Se produce un error si el conjunto de resultados no contiene el número de filas esperado.
Valor escalar Se produce un error si un valor determinado del conjunto de resultados no es igual al valor especificado. El Valor esperado predeterminado es null.

Nota


La condición de prueba Tiempo de ejecución especifica un límite de tiempo en el que debe ejecutarse el script de prueba Transact-SQL. Si se supera este límite de tiempo, la prueba genera un error. Los resultados de pruebas también incluyen una estadística de duración, que difiere de la condición de prueba Tiempo de ejecución. La estadística de duración no solo incluye el tiempo de ejecución, sino también el tiempo para conectarse a la base de datos dos veces; la hora de ejecutar cualquier otro script de prueba, como el script anterior a la prueba y el script posterior a la prueba, y la hora de ejecutar las condiciones de prueba. Por consiguiente, una prueba se puede superar aunque su duración sea mayor que el tiempo de ejecución.

La duración notificada no incluye el tiempo usado para la generación de datos y la implementación del esquema, porque aparecen antes de que se ejecuten las pruebas. Para ver la duración de la prueba, seleccione una serie de pruebas en la ventana Resultados de pruebas, haga clic con el botón secundario y elija Ver detalles de resultados de pruebas.

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

También puede modificar el código del método de prueba directamente para agregar más funcionalidad. Para obtener más información, vea Cómo: Abrir una prueba unitaria de SQL Server para editarla y Cómo: Escribir una prueba unitaria de SQL Server que se ejecuta en el ámbito de una única transacción. Por ejemplo, puede agregar funcionalidad a un método de prueba si agrega instrucciones Assert. Para obtener más información, vea Usar aserciones de Transact-SQL en pruebas unitarias de SQL Server.

Errores esperados

Puede crear pruebas unitarias de SQL Server para probar el comportamiento que no debe ejecutarse correctamente. Estos errores esperados se conocen a veces como pruebas negativas. A continuación, se exponen 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 no se realizó nunca o si el pedido ya se ha rellenado.

  • Comprobar que un procedimiento almacenado que cancela un pedido no pueda cancelar los pedidos completados ni los pedidos que ya se han cancelado.

Puede definir pruebas unitarias de SQL Server para los procedimientos almacenados que producen excepciones esperadas. Puede agregar un atributo al método de prueba unitaria para indicar qué excepción o excepciones se esperan. De esta forma, se evita que la prueba produzca un error cuando se genera la excepción.

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

[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. Estos parámetros se pasan a la instrucción THROW en el código de base de datos. Si especifica MatchFirstError = false, el atributo coincidirá con cualquier error de SQL en la excepción. El comportamiento predeterminado (MatchFirstError = true) consiste en hacer coincidir solamente el primer error que aparezca.

Para obtener un ejemplo de cómo usar excepciones esperadas y una prueba unitaria negativa de SQL Server, vea Tutorial: Crear y ejecutar una prueba unitaria de SQL Server.

Especificar una suma de comprobación de datos

Para mostrar el Diseñador de pruebas unitarias de SQL Server, haga doble clic en el archivo de código fuente de la prueba unitaria en el Explorador de soluciones.

Después de agregar una condición de prueba Suma de comprobación de datos a la prueba unitaria de base de datos, debe configurar la suma de comprobación esperada mediante 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 Suma de comprobación de datos para la que desee 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) Es posible que desee 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 Examinar ().

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

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

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

    System_CAPS_ICON_important.jpg Importante


    Si modifica una condición de suma de comprobación para la que se había especificado anteriormente una suma de comprobación, los cambios realizados en el panel de edición no se guardan. Debe realizar los cambios de nuevo antes de hacer clic en Recuperar.

  7. Haga clic en Recuperar.

    Transact-SQL se ejecuta en 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 de Transact-SQL y repita los pasos 6, 7 y 8, hasta que los resultados son 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

Una vez agregada una condición de prueba Esquema esperado a la prueba unitaria de SQL Server, debe configurar el esquema esperado mediante el procedimiento siguiente:

Para especificar un esquema esperado

  1. En la lista de condiciones de prueba, haga clic en la condición de prueba Esquema esperado para la que desee 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) Es posible que desee 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 Examinar ().

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

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

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

    System_CAPS_ICON_important.jpg Importante


    Si modifica una condición de esquema esperado para la que se había especificado anteriormente un esquema, los cambios realizados en el panel de edición no se guardan. Debe realizar los cambios de nuevo antes de hacer clic en Recuperar.

  7. Haga clic en Recuperar.

    Transact-SQL se ejecuta en 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, el conjunto de resultados y no los valores de los resultados, no tiene que ver los datos en los resultados devueltos, siempre y cuando las columnas aparezcan de la manera que se espera.

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

    La columna Valor de la condición de prueba muestra información acerca del esquema esperado. Por ejemplo, podría indicar “Se esperaba: 2 tablas”.

Condiciones de prueba extensibles

Además de las seis condiciones de prueba predefinidas, puede escribir nuevas condiciones de prueba propias. Estas condiciones de prueba se mostrarán en el panel Condiciones de prueba del Diseñador de pruebas unitarias de SQL Server. Para obtener más información, vea Condiciones de prueba personalizadas para pruebas unitarias de SQL Server.

Vea también

Crear y definir pruebas unitarias de SQL Server
Usar aserciones de Transact-SQL en pruebas unitarias de SQL Server
Scripts de pruebas unitarias de SQL Server