Compartir a través de


Usar aserciones de Transact-SQL en pruebas unitarias de SQL Server

En una prueba unitaria de SQL Server, el script de prueba Transact-SQL se ejecuta y devuelve un resultado. En ocasiones, los resultados se devuelven como un conjunto de resultados. Puede validar los resultados mediante condiciones de prueba. Por ejemplo, puede usar una condición de prueba para comprobar cuántas filas se devuelven en un conjunto de resultados determinado o comprobar cuánto tiempo tardó en ejecutarse una prueba determinada. Para más información sobre las condiciones de prueba, consulte Usar condiciones de prueba en pruebas unitarias de SQL Server.

En lugar de usar condiciones de prueba, puede usar también aserciones de Transact-SQL, que son instrucciones THROW o RAISERROR en un script Transact-SQL. En determinadas circunstancias, quizá prefiera usar una aserción de Transact-SQL en lugar de una condición de prueba.

Uso de las aserciones de Transact-SQL

Debe tener en cuenta los puntos siguientes antes de decidir validar los datos mediante aserciones de Transact-SQL o mediante condiciones de prueba.

  • Rendimiento. Es más rápido ejecutar una aserción de Transact-SQL en el servidor que mover primero los datos a un equipo cliente y manipularlos localmente.

  • Conocimiento del lenguaje. Quizá prefiera un lenguaje determinado según sus conocimientos actuales y, por tanto, elegir las aserciones de Transact-SQL o las condiciones de prueba de Visual C# o Visual Basic.

  • Complejidad de la validación. En algunos casos, puede compilar pruebas más complejas en Visual C# o Visual Basic y validar las pruebas en el cliente.

  • Simplicidad. Suele ser más sencillo usar una condición de prueba predefinida que escribir el script equivalente en Transact-SQL.

  • Bibliotecas de validación heredadas. Si ya tiene código que realiza la validación, puede usarlo en una prueba unitaria de SQL Server en lugar de usar condiciones de prueba.

Marcar los métodos de prueba unitaria con la excepción esperada

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)> _  
[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 RAISERROR en el código de la base de datos. Si especifica MatchFirstError = true, 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, consulte Tutorial: Crear y ejecutar una prueba unitaria de SQL Server.

Instrucción RAISERROR

Nota:

Use THROW en lugar de RAISERROR. RAISERROR está desusado.

Puede usar directamente las aserciones de Transact-SQL en el servidor mediante la instrucción RAISERROR en el script Transact-SQL. Su sintaxis es:

RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)

donde:

@ErrorMessage es cualquier mensaje de error definido por el usuario. Puede dar formato a esta cadena de mensaje de forma similar a como lo hace para la función printf_s.

@ErrorSeverity es un nivel de gravedad definido por el usuario de 0 a 18.

Nota:

Los valores "0" y "10" para el nivel de gravedad no hacen que la prueba unitaria de SQL Server genere un error. Puede usar cualquier otro valor en el rango de 0 a 18 para hacer que la prueba genere un error.

@ErrorState es un entero arbitrario de 1 a 127. Puede usar este entero para distinguir entre las repeticiones de un solo error que se genera en ubicaciones diferentes en el código.

Para más información, consulte RAISERROR (Transact-SQL). En el tema Cómo: Escribir una prueba unitaria de SQL Server que se ejecuta en el ámbito de una única transacción se proporciona un ejemplo de cómo usar RAISERROR en una prueba unitaria de SQL Server.

Consulte también

Crear y definir pruebas unitarias de SQL Server
Usar condiciones de prueba en pruebas unitarias de SQL Server
Comprobar el código de base de datos con pruebas unitarias de SQL Server
Cómo: Abrir una prueba unitaria de SQL Server para editarla