Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describe cómo realizar pruebas unitarias de aplicaciones para la Plataforma universal de Windows (UWP) en Visual Studio. Visual Studio ofrece plantillas de proyecto de prueba unitaria de UWP para C#, Visual Basic y C++. Para obtener más información sobre el desarrollo de aplicaciones para UWP, consulta Introducción a las aplicaciones para UWP.
En el artículo se muestra un ejemplo de creación y pruebas unitarias de una clase de C# en una aplicación para UWP. En el ejemplo se usa el desarrollo controlado por pruebas para escribir pruebas que comprueben comportamientos específicos y, a continuación, escribir código que supere las pruebas.
Creación y ejecución de un proyecto de prueba unitaria
En los procedimientos siguientes se describe cómo crear y ejecutar proyectos de prueba unitaria para aplicaciones para UWP.
Creación de un proyecto de prueba unitaria para UWP
En la ventana Inicio de Visual Studio, elija Crear un nuevo proyecto.
En la página Crear un nuevo proyecto , escriba prueba unitaria en el cuadro de búsqueda. La lista de plantillas se filtra por proyectos de pruebas unitarias.
Seleccione la plantilla de pruebas unitarias de UWP correcta para C# o Visual Basic y, a continuación, seleccione Siguiente.
A partir de Visual Studio 2022, versión 17.14, la plantilla de pruebas unitarias recomendada para C# y .NET 9 es la aplicación de prueba unitaria para UWP y tiene como destino AOT nativo. Las plantillas de UWP anteriores se denominan Aplicación de prueba unitaria para UWP (.NET Native) y Aplicación de prueba unitaria (Windows universal).
Si lo desea, cambie el nombre y la ubicación del proyecto o la solución y, a continuación, seleccione Crear.
Opcionalmente, cambie las versiones de plataforma de destino y mínima y, a continuación, seleccione Aceptar.
Visual Studio crea el proyecto de prueba y lo abre en el Explorador de soluciones de Visual Studio.
En la ventana Inicio de Visual Studio, elija Crear un nuevo proyecto.
En la página Crear un nuevo proyecto , escriba prueba unitaria en el cuadro de búsqueda. La lista de plantillas se filtra por proyectos de pruebas unitarias.
Seleccione la plantilla Aplicación de prueba unitaria (Windows universal) para C# o Visual Basic y, a continuación, seleccione Siguiente.
Si lo desea, cambie el nombre y la ubicación del proyecto o la solución y, a continuación, seleccione Crear.
Opcionalmente, cambie las versiones de plataforma de destino y mínima y, a continuación, seleccione Aceptar.
Visual Studio crea el proyecto de prueba y lo abre en el Explorador de soluciones de Visual Studio.
Editar el manifiesto de aplicación del proyecto
En el Explorador de soluciones, haga clic con el botón secundario en el archivo Package.appxmanifest y seleccione Abrir.
En el diseñador de manifiestos, seleccione la pestaña Capacidades .
En la lista Funcionalidades , seleccione las funcionalidades que necesita para el código y la prueba unitaria. Por ejemplo, si el código y su prueba unitaria necesitan acceder a Internet, seleccione la casilla Internet .
Seleccione solo las capacidades que necesita para que la prueba unitaria funcione correctamente.
Agregar código para realizar pruebas unitarias en la aplicación para UWP
En el editor de código de Visual Studio, edite el archivo de código de prueba unitaria para agregar las aserciones y la lógica que requieren las pruebas. Para obtener ejemplos, vea Prueba unitaria de una clase de C# más adelante en este artículo.
Ejecución de la prueba unitaria con el Explorador de pruebas
Compile la solución y ejecute la prueba unitaria mediante el Explorador de pruebas.
En el menú Prueba de Visual Studio, seleccione Explorador de pruebas. Se abre la ventana Explorador de pruebas .
En el Explorador de pruebas, seleccione el icono Ejecutar todo . Debes usar Ejecutar todo para detectar pruebas en proyectos de UWP.
La solución se compila y la prueba unitaria se ejecuta. Una vez ejecutada la prueba, la prueba aparece en la lista de pruebas del Explorador de pruebas, con información sobre el resultado y la duración.
También en el Explorador de pruebas, puede seleccionar pruebas individuales y hacer clic con el botón secundario para ejecutar o depurar las pruebas, o ir a la prueba para abrir el código de prueba. Desde el menú superior, puede agrupar pruebas, agregar pruebas a listas de reproducción o abrir opciones de prueba.
Compile la solución y ejecute la prueba unitaria mediante el Explorador de pruebas.
En el menú Prueba de Visual Studio, seleccione Explorador de pruebas. Se abre la ventana Explorador de pruebas .
En el Explorador de pruebas, seleccione el icono Ejecutar todo . Debes usar Ejecutar todo para detectar pruebas en proyectos de UWP.
La solución se compila y la prueba unitaria se ejecuta. Una vez ejecutada la prueba, la prueba aparece en la lista de pruebas del Explorador de pruebas, con información sobre el resultado y la duración.
También en el Explorador de pruebas, puede seleccionar pruebas individuales y hacer clic con el botón secundario para ejecutar o depurar las pruebas, o ir a la prueba para abrir el código de prueba. En el menú superior, puede agrupar pruebas, agregar pruebas a listas de reproducción o abrir opciones de prueba.
Prueba unitaria de una clase de C#
Un conjunto estable de buenas pruebas unitarias aumenta la confianza de que no se han introducido errores al cambiar el código. En el ejemplo siguiente se explica una manera de crear pruebas unitarias para una clase de C# en una aplicación para UWP. En el ejemplo se usa el desarrollo controlado por pruebas para escribir pruebas que comprueben un comportamiento específico y, a continuación, escribir código que supere las pruebas.
En el proyecto de código matemático de ejemplo, la clase Rooter implementa una función que calcula la raíz cuadrada estimada de un número. La unidad de proyecto RooterTests prueba la clase Rooter .
Crear la solución y los proyectos
Crea el proyecto de aplicación para UWP:
- En el menú Archivo de Visual Studio, seleccione Nuevo proyecto.
- En la página Crear un nuevo proyecto, escriba aplicación en blanco en el cuadro de búsqueda y, a continuación, seleccione la plantilla de proyecto Aplicación en blanco de C# (Windows universal).
- En la página Configurar el nuevo proyecto , asigne al proyecto el nombre Matemáticas y seleccione Crear.
- Opcionalmente, cambie las versiones de plataforma de destino y mínima y, a continuación, seleccione Aceptar. Visual Studio crea el proyecto y lo abre en el Explorador de soluciones.
Cree el proyecto de prueba unitaria:
- En el Explorador de soluciones, haga clic con el botón secundario en la solución matemática y elija Agregar>nuevo proyecto.
- En la página Agregar un nuevo proyecto, escriba prueba unitaria en el cuadro de búsqueda y, a continuación, seleccione la plantilla de proyecto Aplicación de prueba unitaria de C# (Windows universal).
- Asigne al proyecto de prueba el nombre RooterTests y seleccione Crear.
- Opcionalmente, cambie las versiones de plataforma de destino y mínima y, a continuación, seleccione Aceptar. El proyecto RooterTests aparece en la solución Matemática en el Explorador de soluciones.
Compruebe que las pruebas se ejecutan en el Explorador de pruebas
La Assert clase proporciona varios métodos estáticos que se pueden utilizar para comprobar los resultados de los métodos de prueba.
En el Explorador de soluciones, seleccione el archivo UnitTest.cs en el proyecto RooterTests .
Inserte el siguiente código en
TestMethod1
:[TestMethod] public void TestMethod1() { Assert.AreEqual(0, 0); }
En el Explorador de pruebas, seleccione Ejecutar todas las pruebas.
El proyecto de prueba se compila y se ejecuta, y la prueba aparece en Pruebas superadas. El panel Resumen de grupo de la derecha proporciona detalles sobre la prueba.
Agregar una clase al proyecto de aplicación
En el Explorador de soluciones, haga clic con el botón secundario en el proyecto de matemáticas y seleccione Agregar>clase.
Asigne el nombre Rooter.cs al archivo de clase y, a continuación, seleccione Agregar.
En el editor de código, agregue el siguiente código a la
Rooter
clase en el archivo Rooter.cs :public Rooter() { } // estimate the square root of a number public double SquareRoot(double x) { return 0.0; }
La
Rooter
clase declara un constructor y elSquareRoot
método estimador. ElSquareRoot
método es una implementación mínima para probar la configuración básica de pruebas.Cambie la
internal
palabra clave apublic
en la declaración deRooter
clase, para que el código de prueba pueda acceder a ella.public class Rooter
En el Explorador de soluciones, haga clic con el botón secundario en el proyecto de matemáticas y seleccione Agregar>clase.
Asigne el nombre Rooter.cs al archivo de clase y, a continuación, seleccione Agregar.
En el editor de código, agregue el siguiente código a la
Rooter
clase en el archivo Rooter.cs :public Rooter() { } // estimate the square root of a number public double SquareRoot(double x) { return 0.0; }
La
Rooter
clase declara un constructor y elSquareRoot
método estimador. ElSquareRoot
método es una implementación mínima para probar la configuración básica de pruebas.Agregue la
public
palabra clave a la declaración deRooter
clase para que el código de prueba pueda acceder a ella.public class Rooter
Agregar una referencia del proyecto de prueba al proyecto de aplicación
En el Explorador de soluciones, haga clic con el botón secundario en el proyecto RooterTests y seleccione Agregar>referencia.
En el cuadro de diálogo Administrador de referencias - RooterTests , expanda Proyectos y seleccione el proyecto de matemáticas .
Selecciona Aceptar.
Agregue la siguiente
using
instrucción al UnitTest.cs, después de lausing Microsoft.VisualStudio.TestTools.UnitTesting;
línea:using Maths;
En el Explorador de soluciones, haga clic con el botón secundario en el proyecto RooterTests y seleccione Agregar>referencia.
En el cuadro de diálogo Administrador de referencias - RooterTests , expanda Proyectos y seleccione el proyecto de matemáticas .
Selecciona Aceptar.
Añádase la siguiente
using
instrucción a UnitTest.cs, después de lausing Microsoft.VisualStudio.TestTools.UnitTesting;
línea:using Maths;
Agregar una prueba que use la función de la aplicación
Agregue el siguiente método de prueba a UnitTest.cs:
[TestMethod] public void BasicTest() { Maths.Rooter rooter = new Rooter(); double expected = 0.0; double actual = rooter.SquareRoot(expected * expected); double tolerance = .001; Assert.AreEqual(expected, actual, tolerance); }
La nueva prueba aparece en el Explorador de soluciones y en el nodo No ejecutar pruebas del Explorador de pruebas.
Para evitar un error "La carga contiene dos o más archivos con la misma ruta de destino", en el Explorador de soluciones, expanda el nodo Propiedades en el proyecto de matemáticas y elimine el archivo Default.rd.xml .
Guarde todos los archivos.
Ejecución de las pruebas
En el Explorador de pruebas, seleccione el icono Ejecutar todas las pruebas . La solución se compila y las pruebas se ejecutan y superan.
En el Explorador de pruebas, seleccione el icono Ejecutar todas las pruebas . La solución se compila y las pruebas se ejecutan y superan.
Si obtiene un error de entidad duplicada al ejecutar la prueba, elimine el archivo Properties\Default.rd.xml
de directivas de tiempo de ejecución del proyecto de prueba y vuelva a intentarlo.
Configuraste los proyectos de prueba y de aplicación y comprobaste que puedes ejecutar pruebas que llamen a funciones en el proyecto de aplicación. Ahora puedes escribir pruebas y código reales.
Añade pruebas y haz que pasen
Es mejor no cambiar las pruebas que han pasado. En su lugar, agregue nuevas pruebas. Desarrolle código agregando pruebas de una en una y asegúrese de que todas las pruebas se superen después de cada iteración.
Agregue una nueva prueba llamada
RangeTest
a UnitTest.cs:[TestMethod] public void RangeTest() { Rooter rooter = new Rooter(); for (double v = 1e-6; v < 1e6; v = v * 3.2) { double expected = v; double actual = rooter.SquareRoot(v*v); double tolerance = expected/1000; Assert.AreEqual(expected, actual, tolerance); } }
Ejecute la prueba RangeTest y compruebe que se produce un error.
Sugerencia
En el desarrollo basado en pruebas, se ejecuta una prueba inmediatamente después de escribirla. Esta práctica te ayuda a evitar el error fácil de escribir una prueba que nunca falla.
Corrija el código de la aplicación para que se supere la nueva prueba. En Rooter.cs, cambie la función de la
SquareRoot
siguiente manera:public double SquareRoot(double x) { double estimate = x; double diff = x; while (diff > estimate / 1000) { double previousEstimate = estimate; estimate = estimate - (estimate * estimate - x) / (2 * estimate); diff = Math.Abs(previousEstimate - estimate); } return estimate; }
En el Explorador de pruebas, seleccione el icono Ejecutar todas las pruebas . Las tres pruebas ya han sido superadas.
Agregue una nueva prueba llamada
RangeTest
a UnitTest.cs:[TestMethod] public void RangeTest() { Rooter rooter = new Rooter(); for (double v = 1e-6; v < 1e6; v = v * 3.2) { double expected = v; double actual = rooter.SquareRoot(v*v); double tolerance = expected/1000; Assert.AreEqual(expected, actual, tolerance); } }
Ejecute la prueba RangeTest y compruebe que se produce un error.
Sugerencia
En el desarrollo basado en pruebas, se ejecuta una prueba inmediatamente después de escribirla. Esta práctica te ayuda a evitar el error fácil de escribir una prueba que nunca falla.
Corrija el código de la aplicación para que se supere la nueva prueba. En Rooter.cs, cambie la función de la
SquareRoot
siguiente manera:public double SquareRoot(double x) { double estimate = x; double diff = x; while (diff > estimate / 1000) { double previousEstimate = estimate; estimate = estimate - (estimate * estimate - x) / (2 * estimate); diff = Math.Abs(previousEstimate - estimate); } return estimate; }
En el Explorador de pruebas, seleccione el icono Ejecutar todas las pruebas . Las tres pruebas ya han sido superadas.
Refactorizar el código
En esta sección, refactoriza la aplicación y el código de prueba y, a continuación, vuelve a ejecutar las pruebas para asegurarse de que siguen superando.
Simplifique la estimación de la raíz cuadrada
En Rooter.cs, simplifique el cálculo central en la
SquareRoot
función cambiando la siguiente línea:estimate = estimate - (estimate * estimate - x) / (2 * estimate);
En
estimate = (estimate + x/estimate) / 2.0;
Ejecute todas las pruebas para asegurarse de que no ha introducido una regresión. Todas las pruebas deben pasar.
Eliminar código de prueba duplicado
El RangeTest
método codifica de forma rígida el denominador de la tolerance
variable que se pasa al Assert método. Si planea agregar más pruebas que usen el mismo cálculo de tolerancia, el uso de un valor codificado de forma rígida en varias ubicaciones hace que el código sea más difícil de mantener. En su lugar, puede agregar un método auxiliar privado a la UnitTest1
clase para calcular el valor de tolerancia y, a continuación, llamar a ese método desde RangeTest
.
Para agregar el método auxiliar, en UnitTest.cs:
Agregue el siguiente método a la clase
UnitTest1
:private double ToleranceHelper(double expected) { return expected / 1000; }
En
RangeTest
, cambie la siguiente línea:double tolerance = expected/1000;
En
double tolerance = ToleranceHelper(expected);
Ejecute la prueba RangeTest para asegurarse de que sigue pasando.
Sugerencia
Si agrega un método auxiliar a una clase de prueba y no desea que el método auxiliar aparezca en la lista del Explorador de pruebas, no agregue el TestMethodAttribute atributo al método.