Uso de condiciones de prueba en pruebas unitarias de SQL Server

En una prueba unitaria de SQL Server, se ejecutan uno o varios scripts de prueba de Transact-SQL. Los resultados se pueden evaluar en el script de Transact-SQL y THROW o RAISERROR usarse para devolver un error y provocar un fallo en la prueba, o se pueden definir condiciones de prueba para evaluar los resultados. La prueba devuelve una instancia de la clase SqlExecutionResult . La instancia de esta clase contiene uno o varios Conjuntos 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 mediante condiciones de prueba. SQL Server Data Tools proporciona un conjunto de condiciones de prueba predefinidas. También puede crear y usar condiciones personalizadas; Consulte 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 desde el script de Transact-SQL no coincide con la suma de comprobación esperada. Para obtener más información, consulte Especificar una suma de comprobación de datos.

Nota: Esta condición de prueba no se recomienda si va a devolver datos que varían entre las ejecuciones de pruebas. Por ejemplo, si el conjunto de resultados contiene fechas o horas generadas, o bien contiene columnas de identidad, se produce un error en las pruebas porque la suma de comprobación es diferente en cada ejecución.
Conjunto de resultados vacío Se produce un error si el conjunto de resultados devuelto del script de Transact-SQL no está vacío.
Tiempo de ejecución Se produce un error si el script de prueba de Transact-SQL tarda más de lo esperado en ejecutarse. El tiempo de ejecución predeterminado es de 30 segundos.

El tiempo de ejecución solo se aplica a la prueba de script de prueba, no al script de prueba previa o 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 a través de las propiedades de la condición de prueba. Para obtener más información, consulte Especificación de un esquema esperado.
No concluyente Siempre genera una prueba con un resultado inconclusivo. Esta es la condición predeterminada agregada a cada prueba. Esta condición de prueba se incluye para indicar que no se ha implementado la comprobación de pruebas. Elimine esta condición de prueba de la prueba después de agregar otras condiciones de prueba.
Conjunto de resultados no 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 Transact-SQL @@RAISERROR del script de prueba para probar si una actualización funcionó correctamente. 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 Se produce un error si el conjunto de resultados no contiene el número esperado de filas.
Valor escalar Se produce un error si un valor determinado del conjunto de resultados no es igual al valor especificado. El valor predeterminado Esperado es NULL.

La condición de prueba Tiempo de ejecución especifica un límite de tiempo con el que se debe ejecutar el script de prueba de Transact-SQL. Si se supera este límite de tiempo, se produce un error en la prueba. Los resultados de las pruebas también incluyen una estadística de duración, que difiere de la condición de prueba de tiempo de ejecución. La estadística Duración incluye no solo el tiempo de ejecución, sino también el tiempo para conectarse a la base de datos dos veces; el tiempo para ejecutar cualquier otro script de prueba, como el script de prueba previa y el script posterior a la prueba; y el tiempo para ejecutar las condiciones de prueba. Por lo tanto, una prueba puede superarse incluso si su duración es mayor que su 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 se producen antes de ejecutar las pruebas. Para ver la duración de la prueba, seleccione una ejecución de pruebas en la ventana Resultados de pruebas, haga clic con el botón derecho y elija Ver detalles de los resultados de la prueba.

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 editar 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 editar y cómo: Escribir una prueba unitaria de SQL Server que se ejecuta dentro del ámbito de una sola transacción. Por ejemplo, puede agregar funcionalidad a un método de prueba agregando instrucciones Assert. Para obtener más información, consulte Uso de 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 debería tener éxito. Estos errores esperados a veces se conocen como pruebas negativas. Algunos ejemplos incluyen:

  • Compruebe que se produce un error en un procedimiento almacenado que elimina los datos de un cliente si especifica un identificador de cliente no válido.
  • Compruebe que se produce un error en un procedimiento almacenado que rellena un pedido si el pedido nunca se ha realizado o si el pedido ya se ha rellenado.
  • Compruebe que un procedimiento almacenado que cancela un pedido no puede cancelar los pedidos completados ni los pedidos que ya se han cancelado.

Puede definir pruebas unitarias de SQL Server para procedimientos almacenados que produzcan excepciones esperadas. Puede agregar un atributo al método de prueba unitaria para indicar qué excepción o excepciones se esperan. Al hacerlo, se impide que se produzca un error en la prueba cuando se produzca 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)]

Where:

  • 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 omiten todos los parámetros no especificados. Puede usar estos parámetros en la instrucción THROW de su código de base de datos. Si especifica MatchFirstError = false, el atributo coincide con cualquiera de los SqlErrors en la excepción. El comportamiento predeterminado (MatchFirstError = true) es coincidir solo con el primer error que se produce.

Para obtener un ejemplo de cómo usar excepciones esperadas y una prueba unitaria negativa de SQL Server, vea Tutorial: Creación y ejecución de 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 prueba unitaria en el Explorador de soluciones.

Después de agregar una condición de prueba de Checksum de datos a la prueba unitaria de base de datos, debe configurar el Checksum esperado siguiendo el procedimiento siguiente.

Especificar una suma de comprobación esperada

  1. En la lista de condiciones de prueba, seleccione la condición de prueba de checksum de datos para la que desea especificar un checksum.

  2. Abra la ventana Propiedades presionando F4. También puede abrir el menú Ver y seleccionar la Ventana de Propiedades.

  3. (Opcional) Es posible que desee cambiar la propiedad (Name) de la condición de prueba para que sea más descriptivo.

  4. En la propiedad Configuración, seleccione el botón Examinar (...).

    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 How to: Create a Database Connection.

  6. De forma predeterminada, el cuerpo Transact-SQL de la prueba aparece en el panel 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, es posible que tenga que agregar ese código.

    Importante

    Si modifica una condición de suma de comprobación para la que había especificado previamente una suma de comprobación, no se guardarán los cambios realizados en el panel de edición. Debe volver a realizar esos cambios antes de seleccionar Recuperar.

  7. Seleccione Recuperar.

    El 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, seleccione Aceptar. De lo contrario, modifique el cuerpo del 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 SQL Server, debe configurar el esquema esperado mediante el procedimiento siguiente:

Especificación del esquema esperado

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

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

  3. (Opcional) Es posible que desee cambiar la propiedad (Name) de la condición de prueba para que sea más descriptivo.

  4. En la propiedad Configuración, seleccione el botón Examinar (...).

    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 How to: Create a Database Connection.

  6. De forma predeterminada, el cuerpo Transact-SQL de la prueba aparece en el panel 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, es posible que tenga que agregar ese código.

    Importante

    Si modifica una condición de esquema esperada para la que había especificado previamente un esquema, no se guardarán los cambios realizados en el panel de edición. Debe volver a realizar esos cambios antes de seleccionar Recuperar.

  7. Seleccione Recuperar.

    El 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, del conjunto de resultados y no de los valores de los resultados, no es necesario ver ningún dato en los resultados devueltos, siempre y cuando las columnas aparezcan de la manera en que espera que aparezcan.

  8. Si los resultados coinciden con los resultados esperados de la prueba, seleccione Aceptar. De lo contrario, modifique el cuerpo del 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 "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 muestran 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.