Compartir a través de


Anatomía de las pruebas unitarias

Al crear una prueba unitaria, se agregan varios archivos a la solución. En este tema, utilizaremos un ejemplo de prueba unitaria para explorar los archivos más comunes. En el ejemplo procede del tema Tutorial: Crear y ejecutar pruebas unitarias.

Partes de un archivo de prueba unitaria

Al crear una prueba unitaria, se crea un archivo de prueba unitaria independiente para cada clase que se prueba. Cada archivo de prueba unitaria contiene un método de prueba para cada método que se prueba. En este ejemplo, los dos métodos que se prueban pertenecen a la misma clase. Por tanto, solamente existe un archivo de clase de pruebas, BankAccountTest.cs.

Sección superior del archivo

En la siguiente ilustración se muestran las primeras líneas de código, incluida la referencia a los espacios de nombres, la clase TestContext y el atributo TestClassAttribute. Vea el tutorial si desea obtener ejemplos de código.

Sección superior de un archivo de prueba unitaria de ejemplo

  1. Microsoft.VisualStudio.TestTools.UnitTesting: al crear una prueba unitaria, se agrega al proyecto de prueba una referencia al espacio de nombres Microsoft.VisualStudio.TestTools.UnitTesting. Además, el espacio de nombres se incluye en una instrucción using en la parte superior del archivo de prueba unitaria. El espacio de nombres tiene muchas clases para ayudarle con las pruebas unitarias, a saber:

    • Clases Assert que se pueden utilizar para comprobar las condiciones en las pruebas unitarias.

    • Atributos de inicialización y limpieza para ejecutar código antes o después de ejecutar las pruebas unitarias, a fin de asegurarse un estado inicial y final concretos.

    • El atributo ExpectedException para comprobar si se inicia determinado tipo de excepción durante la ejecución de la prueba unitaria.

    • La clase TestContext que almacena la información que se proporciona a las pruebas unitarias, como la conexión de datos para las pruebas controladas por datos y la información necesaria para ejecutar las pruebas unitarias para los servicios Web ASP.NET.

    Para obtener más información, vea Microsoft.VisualStudio.TestTools.UnitTesting.

  2. TestClassAttribute: al crear una prueba unitaria, el atributo TestClassAttribute se incluye en el archivo de pruebas para indicar que esta clase determinada puede contener métodos marcados con el atributo [TestMethod()]. Sin TestClassAttribute, los métodos de prueba se omiten.

    Una clase de prueba puede heredar métodos de otra clase de prueba que esté en el mismo ensamblado. Esto significa que es posible crear métodos de prueba reutilizables en clases de prueba base y, a continuación, utilizarlos en clases de prueba derivadas.

    Para obtener más información, vea TestClassAttribute.

  3. TestContext: al crear pruebas unitarias, se incluye una variable denominada testContextInstance para cada clase de prueba. Las propiedades de la clase TestContext almacenan información referente a la prueba actual. Para obtener más información, vea TestContext.

Sección inferior del archivo

En la ilustración siguiente se muestra la parte final del código que se genera en el tutorial, que incluye la sección "Atributos de prueba adicionales", el atributo TestMethod y la lógica del método, con una instrucción Assert.

Sección inferior de un archivo de prueba unitaria de ejemplo

  1. Atributos de prueba adicionales: expanda esta sección para ver los métodos marcados como comentarios que se pueden usar para incluir la inicialización y la limpieza mediante los atributos siguientes:

    1. [ClassInitialize ()]   Use ClassInitialize para ejecutar el código antes de hacer la primera prueba en la clase.

    2. [ClassCleanUp ()]   Use ClassCleanup para ejecutar el código cuando todas las pruebas de una clase se hayan ejecutado.

    3. [TestInitialize ()]   Use TestInitialize para ejecutar el código antes de hacer cada prueba.

    4. [TestCleanUp ()]   Use TestCleanup para ejecutar el código cuando cada prueba se haya ejecutado.

      Cree métodos marcados con el atributo [ClassInitialize ()] o [TestInitialize ()] para preparar aspectos del entorno en el que se ejecutará su prueba unitaria. El propósito de esto es establecer un estado conocido para ejecutar la prueba unitaria. Por ejemplo, puede utilizar el método [TestInitialize ()] o () [ClassInitialize] para copiar, modificar o crear algunos archivos de datos que su prueba utilizará.

      Cree métodos marcados con el atributo () [ClassCleanup] o [TestCleanUp {}] para devolver el entorno a un estado conocido después de que se haya ejecutado una prueba. Esto podría significar la eliminación de archivos de carpetas o el retorno de una base de datos a un estado conocido. Un ejemplo de esto es restablecer una base de datos de inventario a un estado inicial después de probar un método que se utiliza en una aplicación de entrada de pedidos.

      Nota

      Se recomienda que utilice el código de limpieza en un método [TestCleanup ()] o [ClassCleanup ()] y no en un método finalizador. Las excepciones que se inicien desde un método finalizador no se detectarán y pueden producir resultados inesperados.

  2. TestMethodAttribute: al crear una prueba unitaria, cada método de prueba unitaria se marca con el atributo [TestMethod()]. Sin este atributo, la prueba unitaria no se ejecuta. Para obtener más información acerca del atributo TestMethod, vea TestMethodAttribute.

  3. Lógica del método de prueba, con una instrucción Assert: cada prueba unitaria que se genera tiene variables vacías y una instrucción Assert de marcador de posición. La instrucción Assert de marcador de posición predeterminada suele ser la instrucción Assert.Inconclusive. Para que la prueba sea significativa, es preciso inicializar las variables y reemplazar el marcador de posición con una instrucción Assert adecuada.

    En este ejemplo, se ha dejado el método de prueba unitaria CreditTest tal y como se generó, con sus instrucciones TODO. Sin embargo, se han inicializado las variables y se ha reemplazado la instrucción Assert en el método de prueba DebitTest. Las instrucciones TODO actúan como avisos de que puede ser conveniente inicializar estas líneas de código.

    Nota

    El contenido de los métodos de prueba puede variar, dependiendo del tipo de prueba unitaria y de la naturaleza del método que se prueba.

Nota sobre las convenciones de nomenclatura: las herramientas de pruebas de Visual Studio utilizan convenciones de nomenclatura cuando se generan las pruebas unitarias. Por ejemplo, un archivo de prueba unitaria se nombra concatenando la palabra "Test" con el nombre del archivo que contiene el código que se va a probar; en el ejemplo es "BankAccountTest.cs". Los nombres de las clases de prueba y los métodos de prueba también se generan mediante valores predeterminados. Estos valores predeterminados se pueden cambiar en el cuadro de diálogo Configuración de generación de pruebas, que se abre haciendo clic en Configuración en el cuadro de diálogo Crear pruebas unitarias.

Elementos agregados a la solución

En esta sección se abordan los demás archivos, aparte del archivo de prueba unitaria, que se generan en Tutorial: Crear y ejecutar pruebas unitarias.

Nota

Los archivos que se crean de forma predeterminada al generar una prueba unitaria dependen de la configuración del proyecto de prueba. Para cambiar estos valores, haga clic en Herramientas y, a continuación, en Opciones. En el cuadro de diálogo Opciones, expanda Herramientas de prueba y, a continuación, haga clic en Proyecto de prueba.

En la siguiente ilustración se muestra el Explorador de soluciones después de crear una prueba unitaria para el proyecto de ejemplo.

Explorador de soluciones para un proyecto de prueba unitaria de ejemplo

  1. Elementos de la solución: contiene dos archivos:

    • Local.testsettings: esta configuración controla cómo se ejecutan las pruebas locales que no recolectan datos de diagnóstico.

    • Bank.vsmdi: este archivo contiene información sobre las listas de pruebas que se encuentran en la solución y rellena la ventana Editor de lista de pruebas.

    • TraceAndTestImpact.testsettings: esta configuración controla cómo se ejecutan las pruebas locales que recolectan un conjunto concreto de datos de diagnóstico.

  2. Proyecto de prueba: contiene los archivos restantes que se necesitan para las pruebas unitarias.

  3. Propiedades del proyecto de prueba: contiene el archivo AssemblyInfo.cs, que proporciona opciones de compilación para el proyecto.

  4. Referencias del proyecto de prueba: contiene las referencias necesarias para ejecutar las pruebas unitarias. Al generar una prueba unitaria a partir del código existente, las referencias necesarias están incluidas. Sin embargo, se pueden agregar referencias para personalizar las pruebas.

  5. Archivo de prueba unitaria: se trata del archivo de prueba unitaria descrito en la primera sección de este tema. Para cada clase que se prueba, en el proyecto de prueba se crea un archivo de prueba unitaria independiente. En este ejemplo, los dos métodos que se prueban pertenecen a la misma clase. Por tanto, solamente existe un archivo de clase de pruebas, BankAccountTest.cs.

Vea también

Referencia

Microsoft.VisualStudio.TestTools.UnitTesting

Conceptos

Crear y ejecutar pruebas unitarias para código existente

Pruebas unitarias y C++

Pruebas unitarias para métodos genéricos

Pruebas unitarias para servicios Web ASP.NET

Pruebas unitarias para métodos privados, internos y amigos