Compartir a través de


Tutorial: Crear y ejecutar pruebas unitarias

Este tutorial le permite recorrer paso a paso el procedimiento de creación, ejecución y personalización de una serie de pruebas utilizando Microsoft Visual Studio 2010. 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 2010 Premium.

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

    Aparecerá el cuadro de diálogo Nuevo proyecto.

  3. En Plantillas instaladas, haga clic en Visual C#.

  4. En la lista de tipos de aplicación, haga clic en Biblioteca de clases.

  5. En el cuadro Nombre, escriba Bank y, a continuación, 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 con el archivo Class1.cs abierto en el editor de código.

    Nota

    Si el archivo Class1.cs no se abre en el editor de código, en el Explorador de soluciones, haga doble clic en el archivo para abrirlo.

  6. Copie el código fuente de Proyecto de ejemplo para crear pruebas unitarias.

  7. Reemplace el contenido original de Class1.cs con el código de Proyecto de ejemplo para crear pruebas unitarias.

  8. 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. Si el archivo Class1.cs no está abierto en el editor de código, en el Explorador de soluciones, haga doble clic en el archivo Class1.cs del proyecto Bank.

  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.

  9. Para saber qué valores se van a usar en el método DebitTest, 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 el parámetro 5.77 y se llama al método Debit con el parámetro 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

    Más adelante en este tutorial, usará el valor previsto de Balance (0.77).

  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 método CreditTest, agregue ("Mr. Bryan Walton", 11.99) al nuevo elemento BankAccount.

  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. En el menú Prueba, haga clic en Ventanas y seleccione Vista de pruebas.

    Se muestra 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 clic con el botón secundario en la fila que representa la prueba y, a continuación, haga clic en Ver detalles de resultados de la prueba.

  4. En la página Detalles de resultados de la prueba, aparece el mensaje de error "Assert.Inconclusive failed. 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 clic con el botón secundario en la fila que representa la prueba y, a continuación, haga clic en Ver detalles de resultados de 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 recompilar el proyecto de prueba después de cambiar el código fuente, porque cuando una prueba se ejecuta automáticamente, compila 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 usando 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.

Si está usando Visual Studio 2010 Ultimate, puede crear pruebas de carga para aislar problemas de esfuerzo y rendimiento usando las pruebas unitarias.

Tutorial: Crear y ejecutar una prueba de carga que contenga pruebas unitarias

Vea también

Tareas

Proyecto de ejemplo para crear pruebas unitarias