uwp
Pruebas unitarias para UWP
Buscar..
Introducción
Me gustaría mostrarle cómo crear Pruebas unitarias para la aplicación universal de Windows 10. Para probar las aplicaciones de UWP usaremos xUnit.net Framework, sobre el cual puede leer más en el enlace que proporcioné en la sección de comentarios.
Observaciones
Puede leer más sobre xUnit Framewwork: https://xunit.github.io/docs/getting-started-uwp.html
Configurar la aplicación de prueba
Una vez que tenga su aplicación UWP lista para las pruebas, debe agregar la aplicación de prueba a su solución. Para hacerlo "a la derecha", haga clic en la solución y elija "Unit Test App (Universal Windows)":
Una vez que lo agrega a la solución, hay algunos pasos más necesarios para configurarlo. Se le pedirá que seleccione la versión de destino y la plataforma mínima:
Una vez que los seleccione, abra el archivo "project.json" y agregue las siguientes dependencias:
"dependencies":
{
"Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0",
"xunit.runner.visualstudio": "2.1.0",
"xunit": "2.1.0",
"xunit.runner.devices": "2.1.0"
}
Estos se utilizan para descargar y agregar paquetes de NuGet xUnit Framework para facilitar las pruebas unitarias para la aplicación UWP.
Eliminar la referencia llamada "MSTestFramework.Universal":
Ahora abra el archivo "UnitTest.cs". Modifíquelo para que se vea a continuación:
using System;
using Xunit;
namespace UnitTestsForUwp
{
public class UnitTest1
{
[Fact]
public void TestMethod1()
{
Assert.Equal(4, 4);
}
[Theory]
[InlineData(6)]
public void TestMethod2(int value)
{
Assert.True(IsOdd(value));
}
bool IsOdd(int value)
{
return value % 2 == 1;
}
}
}
}
Es bueno detenerse aquí por un momento para hablar un poco sobre los atributos de xUnit:
a. Pruebas que siempre son ciertas. Prueban condiciones invariantes.
segundo. Teoría: pruebas que solo son ciertas para un conjunto particular de datos.
Ahora nos gustaría preparar la aplicación para mostrar información sobre las pruebas, pero no solo: es bueno tener una buena manera de comenzar las pruebas. Para lograrlo necesitamos hacer pequeños cambios en el archivo "UnitTestApp.xaml". Ábrelo y reemplaza todo el código con pegado a continuación:
<ui:RunnerApplication
x:Class="UnitTestsForUwp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:UnitTestsForUwp"
xmlns:ui = "using:Xunit.Runners.UI"
RequestedTheme="Light">
</ui:RunnerApplication>
Recuerde que "local" debe tener el mismo nombre que su espacio de nombres.
Ahora abra "UnitTestApp.xaml.cs" y reemplace el código con el siguiente:
sealed partial class App : RunnerApplication
{
protected override void OnInitializeRunner()
{
AddTestAssembly(GetType().GetTypeInfo().Assembly);
InitializeRunner();
}
partial void InitializeRunner();
}
¡Eso es! Ahora reconstruir el proyecto y lanzar la aplicación de prueba. Como puede ver a continuación, tiene acceso a todas sus pruebas, puede iniciarlas y verificar los resultados:
Conecte la aplicación de prueba con el código de la aplicación de destino
Una vez que su aplicación de prueba esté lista, puede conectarla con el código para el que desea escribir pruebas unitarias.
Ya sea que tenga su código en PCL, o en el proyecto de aplicación UWP (supongo que aplicó el patrón MVVM), simplemente agregue una referencia a él en el proyecto de aplicación de prueba:
Ahora tienes acceso a todo tu código desde la aplicación de prueba. Cree las pruebas unitarias que desee. Solo usa "Hechos" o "Teorías".
Burlarse de alguna funcionalidad
Una vez que tenga todo preparado para escribir sus Pruebas Unitarias, vale la pena mencionar acerca de la burla. Existe un nuevo marco denominado "SimpleStubs" que le permite crear simulaciones basadas en las interfaces.
Caso simple de la documentación de GitHub:
//Sample interface:
public interface IPhoneBook
{
long GetContactPhoneNumber(string firstName, string lastName);
long MyNumber { get; set; }
event EventHandler<long> PhoneNumberChanged;
}
//Mocked interface:
var stub = new StubIPhoneBook().GetContactPhoneNumber((firstName, lastName) => 6041234567);
Puede leer más sobre esto aquí: https://github.com/Microsoft/SimpleStubs