Scripts en pruebas unitarias en SQL Server

Cada prueba unitaria de SQL Server contiene una sola acción de prueba previa, acción de prueba y acción posterior a la prueba. Cada una de estas acciones contiene a su vez:

  • Script de Transact-SQL que se ejecuta en una base de datos.
  • Cero o más condiciones de prueba que evalúan los resultados devueltos de la ejecución del script.

El script de prueba Transact-SQL en la acción de prueba es el único componente que debe incluir en cada prueba unitaria de SQL Server. Además del propio script de prueba, probablemente también quiera especificar condiciones de prueba para comprobar si el script de prueba devolvió el valor o el conjunto de valores esperados. La acción de prueba hace ejercicios o cambia un objeto determinado en esa base de datos y, a continuación, evalúa ese cambio.

Para cada acción de prueba, puede incluir una acción anterior a la prueba y una acción posterior a la prueba. De forma similar a la acción de prueba, cada acción anterior a la prueba y cada acción posterior a la prueba contiene un script de Transact-SQL y cero o más condiciones de prueba. Puede usar una acción previa a la prueba para asegurarse de que la base de datos está en un estado que permita que la acción de prueba se ejecute y devuelva resultados significativos. Por ejemplo, puede usar una acción de prueba previa para comprobar que una tabla contiene datos antes de que el script de prueba realice una operación en esos datos.

Una vez que la acción de prueba previa prepara la base de datos y la acción de prueba devuelve resultados significativos, la acción posterior a la prueba se puede usar para devolver la base de datos al estado en el que estaba antes de que se ejecutara la acción de prueba previa. O bien, en algunos casos, puede usar la acción posterior a la prueba para validar los resultados de la acción de prueba. Esto se debe a que la acción posterior a la prueba puede tener privilegios de base de datos mayores que la acción de prueba. Para obtener más información, consulte Información general sobre las cadenas de conexión y los permisos.

Además de estas tres acciones, también hay dos scripts de prueba (denominados scripts comunes), que se ejecutan antes y después de cada ejecución de pruebas unitarias de SQL Server. Como resultado, se pueden ejecutar hasta cinco scripts Transact-SQL durante la ejecución de una sola prueba unitaria de SQL Server. Solo se requiere el script de Transact-SQL contenido en la acción de prueba; Los scripts comunes y los scripts de acción previos y posteriores a la prueba son opcionales.

En la tabla siguiente se proporciona una lista completa de scripts asociados a cualquier prueba unitaria de SQL Server.

Acción Tipo de script Description
TestInitialize Script común (inicialización) (Opcional) Este script precede a todas las acciones de preprueba y prueba dentro de la prueba unitaria. El script TestInitialize se ejecuta antes de cada prueba unitaria en una clase de prueba determinada. Este script se ejecuta en el contexto privilegiado.
Prueba previa Script de prueba (Opcional) Este script forma parte de la prueba unitaria. El script de prueba previa se ejecuta antes de la acción de prueba dentro de una prueba unitaria. Este script se ejecuta en el contexto privilegiado.
Test Script de prueba (Obligatorio) Este script forma parte de la prueba unitaria. Este script podría ejecutar, por ejemplo, un procedimiento almacenado que obtiene, inserta o actualiza los valores de la tabla. Este script se ejecuta mediante el contexto de ejecución.
Prueba posterior Script de prueba (Opcional) Este script forma parte de la prueba unitaria. El script posterior a la prueba se ejecuta después de una prueba unitaria individual. Este script se ejecuta en el contexto privilegiado.
TestCleanup Script común (limpieza) (Opcional) Este script sigue la prueba unitaria. El script TestCleanup se ejecuta después de todas las pruebas unitarias de una clase de prueba determinada. Este script se ejecuta en el contexto privilegiado.

Para obtener más información sobre los distintos contextos de seguridad en los que se ejecuta cada uno de estos scripts, consulte Información general sobre las cadenas de conexión y los permisos. También puede revisar la sección de permisos de prueba unitaria de SQL Server en Permisos necesarios para SQL Server Data Tools.

Orden en el que se ejecutan los scripts

Es importante comprender el orden en que se ejecuta cada script. Aunque no puede cambiar ese orden, puede decidir qué scripts desea ejecutar. En la ilustración siguiente se incluye la selección de scripts que puede usar en una ejecución de prueba que contiene dos pruebas unitarias de SQL Server y muestra el orden en el que se ejecutan:

Diagrama de dos pruebas unitarias de base de datos.

Nota:

Si se ha configurado la implementación del proyecto de base de datos de SQL Server, este paso se lleva a cabo al inicio de la ejecución de la prueba dentro de la cadena de conexión de contexto con privilegios. Para obtener más información, vea Cómo: Configurar la ejecución de pruebas unitarias de SQL Server.

Scripts de inicialización y limpieza

En el Diseñador de pruebas unitarias de SQL Server, los scripts TestInitialize y TestCleanup se conocen como scripts comunes. En el ejemplo anterior se supone que las dos pruebas unitarias forman parte de la misma clase de prueba. Como resultado, comparten los mismos scripts TestInitialize y TestCleanup. Para todas las pruebas unitarias dentro de una sola clase de prueba, siempre es el caso. Sin embargo, si la ejecución de pruebas contiene pruebas unitarias de diferentes clases de prueba, los scripts comunes para la clase de prueba asociada se ejecutan antes y después de que se ejecute la prueba unitaria.

Si escribe pruebas unitarias solo con el Diseñador de pruebas unitarias de SQL Server, es posible que no esté familiarizado con el concepto de una clase de prueba. Cada vez que cree una prueba unitaria abriendo el menú Prueba y seleccionando Nueva prueba, SQL Server Data Tools genera una clase de prueba. Las clases de prueba aparecen en el Explorador de soluciones con el nombre de prueba que especificó, seguido de una .cs extensión o .vb . Dentro de cada clase de prueba, las pruebas unitarias individuales se almacenan como métodos de prueba. Sin embargo, independientemente del número de métodos de prueba (es decir, pruebas unitarias), cada clase de prueba puede tener cero o un script TestInitialize y TestCleanup.

Puede usar el script TestInitialize para preparar la base de datos de prueba y puede usar el script TestCleanup para devolver la base de datos de prueba a un estado conocido. Por ejemplo, puede usar TestInitialize para crear un procedimiento almacenado auxiliar que ejecute más adelante, en el script de prueba, para probar otro procedimiento almacenado.

Scripts previos y posteriores a la prueba

Es probable que los scripts asociados a las acciones anteriores y posteriores a la prueba varían de una prueba unitaria a la siguiente. Puede usar estos scripts para establecer cambios incrementales en la base de datos y, a continuación, limpiar esos cambios.