Compartir a través de


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

 

En una prueba unitaria de SQL Server, se ejecuta un script de prueba Transact-SQL que 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 obtener más información sobre las condiciones de prueba, vea 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, vea 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.La 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 entre 0 y 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 entre 1 y 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 obtener más información, vea RAISERROR (Transact-SQL).En el tema SQL Server se proporciona un ejemplo del uso de RAISERROR en una prueba unitaria de Cómo: Escribir una prueba unitaria de SQL Server que se ejecuta en el ámbito de una única transacción.

Vea 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