Tutorial: Crear y ejecutar pruebas unitarias

Actualización: noviembre 2007

Este tutorial le permite recorrer paso a paso el procedimiento de creación, ejecución y personalización de una serie de pruebas utilizando Herramientas para pruebas Team System. Se empieza con un proyecto C# que está en desarrollo, se crean pruebas que utilizan el código, se ejecutan las pruebas y se examinan los resultados. Por último, puede cambiar el código del proyecto y volver a ejecutar las pruebas.

Nota:

Para obtener información acerca de cómo ejecutar pruebas desde una línea de comando, vea Tutorial: Utilizar la utilidad de prueba de la línea de comandos.

En este tutorial, se realizarán las siguientes tareas:

  • Prepare un proyecto "Bank Account" para utilizarlo en un tutorial.

  • Abra un proyecto existente.

  • Cree pruebas unitarias para métodos públicos y privados.

  • Ejecute estas pruebas en el código.

  • Busque y corrija los errores de las pruebas.

  • Busque y corrija los errores del código.

Requisitos previos

Prepare el tutorial

Para preparar el tutorial

  1. Abra Visual Studio Team System Test.

  2. En el menú Archivo, elija Nuevo y haga clic en Proyecto.

    Aparecerá el cuadro de diálogo Nuevo proyecto.

  3. Bajo Tipos de proyecto, haga clic en Visual C#.

  4. En Plantillas, haga clic en Biblioteca de clases.

  5. En la línea Nombre, escriba Bank y haga clic en Aceptar.

    Nota:

    Si el nombre "Bank" ya está en uso, elija otro nombre para el proyecto.

    Se crea el nuevo proyecto Bank y se muestra en el Explorador de soluciones.

  6. Haga doble clic en el archivo Class1.cs en el Explorador de soluciones, para abrirlo en el Editor de código de Visual Studio.

  7. Copie el código fuente de Ejemplo de prueba unitaria.

  8. Reemplace el contenido original de Class1.cs con el código de Ejemplo de prueba unitaria.

  9. En el menú Generar, haga clic en Generar solución.

Ahora tiene un proyecto denominado Bank que contiene código fuente para realizar pruebas y las herramientas necesarias para ello. El espacio de nombres de Bank, BankAccountNS, contiene la clase pública BankAccount cuyos métodos probará en los procedimientos siguientes.

Crear una comprobación de unidades

Requisito previo: siga los pasos del procedimiento Preparar el tutorial.

Para crear una prueba unitaria

  1. En el Explorador de soluciones, haga doble clic en el archivo Class1.cs del proyecto Bank.

    Se abre el archivo de código fuente, que puede ver y editar.

  2. En la clase BankAccount del archivo Class1.cs, desplácese al método Debit().

  3. Haga clic con el botón secundario en el método Debit() y seleccione Crear pruebas unitarias.

    Aparecerá el cuadro de diálogo Crear pruebas unitarias.

    Bajo Selección actual, una estructura de árbol muestra la clase y la jerarquía de miembros del ensamblado que alberga la clase BankAccount. Desde esta página puede generar pruebas unitarias para cualquier selección de los miembros mostrados, así como elegir un proyecto en el que colocar las pruebas generadas.

    En la estructura de árbol, sólo está seleccionado el método Debit(). Déjelo seleccionado y seleccione también el método Credit().

  4. Para Proyecto de salida, seleccione Crear un nuevo proyecto de prueba de Visual C#.

  5. Haga clic en Settings.

    Aparece el cuadro de diálogo Configuración de generación de la prueba. Bajo Configuración de nombres, puede cambiar la manera en que se asignan nombres a los archivos, las clases y los métodos de prueba cuando se generan. Bajo General, puede cambiar otros aspectos de generación de la prueba. Conserve los valores predeterminados para esta configuración y, a continuación, haga clic en Aceptar.

  6. En el cuadro de diálogo Crear pruebas unitarias, haga clic en Aceptar.

    Se muestra el cuadro de diálogo Nuevo proyecto de prueba.

  7. Acepte el nombre predeterminado y haga clic en Crear.

    Se crea un proyecto llamado TestProject1, que se muestra en el Explorador de soluciones.

    A TestProject1 se agrega un archivo denominado BankAccountTest.cs, que contiene una clase de prueba. La clase se rellena con una propiedad TestContext y con métodos para probar los métodos Debit() y Credit().

    Nota:

    Se asigna automáticamente a cada método de prueba el atributo TestMethod(). Cada prueba corresponde a un método único en el código en pruebas que se desea probar. Los métodos de prueba se albergan en una clase de prueba a la que se asigna el atributo TestClass().

  8. En BankAccountTest.cs, especifique valores para las variables que se van a probar. Desplácese al método DebitTest, donde verá líneas // TODO que indican las variables que se van a establecer. ¿Qué valores debería utilizar? Para averiguarlo, debe conocer los valores que se utilizarán cuando se ejecute la aplicación. Determinaremos esos valores en el paso siguiente.

  9. Abra el archivo Class1.cs y desplácese al método Main. Observe que el nombre del cliente se inicializa con Mr. Bryan Walton, el saldo de la cuenta se inicializa en 11.99, se llama al método Credit con un parámetro de 5.77 y se llama al método Debit con un parámetro de 11.22. Por consiguiente, si esta cuenta empieza con un saldo en Balance de 11.99, una llamada al método Debit mientras se pasa 11.22 debe producir un nuevo Balance de 0.77.

    Nota:

    Utilizará este valor esperado de Balance (0.77) en el procedimiento Ejecutar y personalizar una prueba unitaria.

  10. En el archivo BankAccountTest.cs, desplácese al método DebitTest.

  11. Establezca los siguientes valores:

    BankAccount target = new BankAccount("Mr. Bryan Walton", 11.99);
    double amount = 11.22;
    
  12. En el archivo BankAccountTest.cs, realice estas mismas modificaciones en el método CreditTest.

  13. Guarde el archivo BankAccountTest.cs.

Ha creado un archivo de código fuente que contiene pruebas para el proyecto Bank. Ahora está listo para ejecutar las pruebas en la clase BankAccountTest del código del proyecto Bank.

Ejecutar y personalizar un prueba unitaria

Requisito previo: siga los pasos del procedimiento Crear una prueba unitaria.

Para ejecutar y personalizar una prueba unitaria

  1. Abra la ventana Vista de pruebas.

  2. Haga clic con el botón secundario en DebitTest y seleccione Ejecutar selección.

    Si la ventana Resultados de pruebas no estaba abierta, se abrirá ahora. Las ejecuciones de prueba DebitTest.

    En la columna Resultado de la ventana Resultados de pruebas, el estado de la prueba se muestra como En ejecución mientras se está ejecutando la prueba. Cuando termina la ejecución de la prueba, el resultado de la prueba cambia a No concluyente.

  3. En la ventana Resultados de pruebas, haga doble clic en la fila que representa la prueba.

    Se abrirá la página de detalles de resultados, que contiene información sobre los resultados de la prueba.

  4. Observe que en la página de detalles de resultados se muestra el mensaje "Error de Assert.Inconclusive. A method that does not return a value cannot be verified." Para crear una prueba correcta, empiece por buscar y evaluar esta instrucción Assert.

  5. Para encontrar el método de prueba que contiene la instrucción Assert, abra el archivo BankAccountTest.cs y desplácese al método DebitTest().

  6. La instrucción Assert es la última línea del método DebitTest. Contiene el texto siguiente:

    Assert.Inconclusive("A method that does not return a value cannot be verified.");
    

    Marque como comentario esta instrucción Assert.

  7. Si ahora ejecutara la prueba, proporcionaría el resultado Sin error, pero sólo porque no comprueba nada. Debe agregar un código que compruebe los resultados esperados. Agregue la instrucción siguiente al final del método DebitTest:

    Assert.AreEqual((System.Convert.ToDouble(0.77)), target.Balance, 0.05);
    

    Esta instrucción compara el resultado esperado (0.77) con el resultado real de una llamada al método Balance de la clase BankAccount. Si los dos valores no coinciden, la instrucción Assert devuelve False, con lo que la prueba no se supera.

    Nota:

    Esta instrucción Assert incluye un tercer parámetro, delta, con un valor de 0.05. El parámetro delta es necesario en esta sobrecarga del método Assert.AreEqual; compensa el error de redondeo intrínseco de los tipos de punto flotante como Doubles.

Ha ejecutado el método DebitTest generado de su clase de prueba BankAccountTest, ha observado que necesitada cambios, y ha realizado esos cambios. Ahora está listo para probar la exactitud del método Debit en su aplicación.

Ejecutar un prueba unitaria y corregir el código

Requisito previo: siga los pasos del procedimiento Crear y personalizar una prueba unitaria.

Para ejecutar una prueba unitaria y corregir el código

  1. Haga de nuevo la prueba de Debit: en el archivo BankAccountTest.cs, haga clic con el botón secundario en el método DebitTest() y, a continuación, haga clic en Ejecutar pruebas.

    En la columna Resultado de la ventana Resultados de pruebas, el estado de la prueba se muestra como En ejecución mientras se está ejecutando la prueba. Cuando finaliza la ejecución de la prueba, el resultado de la prueba cambia a Error.

  2. En la ventana Resultados de pruebas, haga doble clic en la fila que representa la prueba.

    Se abrirá la página de detalles de resultados, donde aparecerá el mensaje "Error de Assert.AreEqual. Se esperaba una diferencia no superior a <0.05> entre el valor esperado <0.77> y el valor real <23.21>". Estos números parecen indicar un error en una operación matemática. Dado que el método DebitTest de la clase BankAccountTest prueba el método Debit de la clase BankAccount, compruebe en primer lugar el método Debit.

  3. Abra el archivo Class1.cs y desplácese al método Debit.

  4. Observe la asignación siguiente:

    m_balance += amount;
    

    Esta asignación suma una cantidad a un saldo cuando, en un método Debit, debería restarse. Cambie esta línea como sigue:

    m_balance -= amount;
    
  5. Ejecute de nuevo la prueba Debit.

    La columna Resultado de la ventana Resultados de pruebas muestra Sin error para DebitTest.

    Nota:

    No hace falta volver a generar el proyecto después de cambiar el código fuente, porque la ejecución sin notificación de una prueba genera el proyecto.

Ha creado una prueba unitaria que funciona y, a través de ella, ha encontrado y corregido un error en el código.

Crear y ejecutar un prueba unitaria para un método privado

Requisito previo: siga los pasos del procedimiento Crear una prueba unitaria y corregir el código.

Para crear y ejecutar una prueba unitaria para un método privado

  1. Abra el archivo Class1.cs en el proyecto Bank.

  2. Haga clic con el botón secundario en el método FreezeAccount() y seleccione Crear pruebas unitarias.

    Aparecerá el cuadro de diálogo Crear pruebas unitarias.

    En la estructura de árbol mostrada, sólo está seleccionado el método FreezeAccount().

  3. (Opcional) Haga clic en Filtro y, a continuación, desactive Mostrar elementos no públicos. Observe que el método FreezeAccount() se quita de la lista de métodos secundarios de la clase BankAccount. Haga clic de nuevo en Filtro y active Mostrar elementos no públicos para volver a mostrar el método FreezeAccount().

  4. Asegúrese de que el método FreezeAccount() está seleccionado, y, a continuación, haga clic en Aceptar.

    Se creará un nuevo archivo de descriptor de acceso privado con el nombre Bank.accessor. Contiene métodos de descriptores de acceso especiales que la prueba utiliza de manera indirecta para llamar a los métodos privados de la clase BankAccount. Puede ver el nuevo archivo mostrado en el Explorador de soluciones en la carpeta Test References.

  5. Abra el archivo BankAccountTest.cs y desplácese al método FreezeAccountTest().

  6. Cambie el código del método FreezeAccountTest() para tenga el aspecto que se muestra a continuación. Se indican las áreas nuevas o modificadas:

    public void FreezeAccountTest()
    {
        BankAccount_Accessor target = new BankAccount_Accessor("Mr. Bryan Walton", 11.99); // TODO: Initialize to an appropriate value
    target.FreezeAccount(); 
        // Assert.Inconclusive("A method that does not return a value cannot be verified.");
            bool creditAccount = false; // False means account could be credited: Fail test.     // Try to credit account    try    {        target.Credit(1.00);     }    catch (System.Exception)    {        // Threw exception. FreezeAccount worked correctly: Pass test.         creditAccount = true;    }        // Assert fails if 'creditAccount' condition is false. Fail test.    Assert.IsTrue(creditAccount, "Was able to credit account.");
    }
    
  7. Ejecute la prueba FreezeAccountTest.

    En la columna Resultado de la ventana Resultados de pruebas, el estado de prueba final que se muestra es Sin error. Éste es el resultado esperado porque la prueba llamaba al método Credit() después de inmovilizar la cuenta llamando al método FreezeAccount().

Ha agregado un método privado, ha creado una nueva prueba unitaria para él y ha ejecutado la prueba. Puede ejecutarla más veces, utilizando para la variable balance otros valores extremos, como 15.00.

Pasos siguientes

Cuando se ejecutan pruebas de código en un ensamblado, se puede ver la proporción del código del proyecto que se está probando mediante la recopilación de datos de cobertura de código. Para obtener más información, vea Tutorial: Ejecutar pruebas y ver la cobertura del código.

Puede ejecutar las pruebas en una línea de comandos en lugar de en Visual Studio. Para obtener más información, vea Tutorial: Utilizar la utilidad de prueba de la línea de comandos.

Vea también

Tareas

Ejemplo de prueba unitaria

Conceptos

Marco de pruebas unitarias

Resultados de prueba registrados en un informe