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.
Las aplicaciones multiplataforma deben probarse ya que se usarían en el mundo real para mejorar su calidad, confiabilidad y rendimiento. Se deben realizar muchos tipos de pruebas en una aplicación, incluidas las pruebas unitarias, las pruebas de integración y las pruebas de interfaz de usuario. Las pruebas unitarias son la forma más común y es esencial para crear aplicaciones de alta calidad.
Una prueba unitaria toma una pequeña unidad de una aplicación, normalmente un método, la aísla del resto del código y comprueba que se comporta según lo previsto. Su objetivo es comprobar que cada unidad de funcionalidad funciona según lo previsto, para que los errores no se propaguen en toda la aplicación. Detectar un error allí donde se produce es más eficaz que observar el efecto de un error indirectamente en un punto secundario de error.
Las pruebas unitarias normalmente deben usar el patrón arrange-act-assert:
| Step | Description |
|---|---|
| Arrange | Inicialice objetos y establezca el valor de los datos que se pasan al método en prueba. |
| Act | Invoque el método en prueba con los argumentos necesarios. |
| Assert | Compruebe que la acción del método en prueba se comporta según lo previsto. |
Este patrón garantiza que las pruebas unitarias sean legibles, autodescriptivas y coherentes.
Las pruebas unitarias tienen el efecto más significativo en la calidad del código cuando es una parte integral del flujo de trabajo de desarrollo de software. Las pruebas unitarias pueden actuar como documentación de diseño y especificaciones funcionales para la aplicación. En cuanto se haya escrito un método, se deben escribir pruebas unitarias que comprueben el comportamiento del método en respuesta a casos de datos de entrada estándar, límites e incorrectos, y que comprueben las suposiciones explícitas o implícitas realizadas por el código. Como alternativa, con el desarrollo controlado por pruebas, las pruebas unitarias se escriben antes que el código.
Important
Las pruebas unitarias son muy eficaces frente a la regresión. Es decir, una funcionalidad que solía funcionar, pero que ha sido perturbada por una actualización incorrecta.
xUnit es el marco de pruebas recomendado para aplicaciones .NET MAUI.
Incorporación de pruebas xUnit a una solución MAUI de .NET
Para agregar pruebas xUnit a la solución MAUI de .NET, haga lo siguiente:
Use Visual Studio para agregar un nuevo proyecto de prueba xUnit a la solución.
OR
Use la CLI de .NET para crear un nuevo proyecto de prueba de xUnit y agregarlo a la solución. Para obtener más información, consulte Pruebas unitarias de C# en .NET mediante dotnet test y xUnit.
El archivo de proyecto (.csproj) para el proyecto de prueba xUnit será similar al ejemplo siguiente:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
</ItemGroup>
<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>
</Project>
La $(TargetFramework) propiedad build especifica el marco de trabajo de destino para el proyecto de prueba. Esta será la versión más reciente de .NET instalada en el equipo.
El xunit paquete incluye paquetes secundarios que incluyen el propio marco de pruebas y analizadores de Roslyn que detectan problemas comunes con pruebas unitarias. Los xunit.runner.visualstudio paquetes y Microsoft.NET.Test.Sdk son necesarios para ejecutar las pruebas unitarias en Visual Studio, así como con el dotnet test comando . Los paquetes coverlet.collector permiten recopilar cobertura de código. Si no pretende recopilar cobertura de código, puede quitar esta referencia de paquete. Para obtener más información sobre la cobertura de código para las pruebas unitarias, consulte Uso de la cobertura de código para las pruebas unitarias.
Hay dos enfoques principales para estructurar la aplicación para las pruebas unitarias:
- El código que vas a probar con pruebas unitarias se encuentra en un proyecto de biblioteca de clases de .NET MAUI.
- El código que va a probar unitariamente se encuentra en un proyecto de aplicación de .NET MAUI.
Cada enfoque requiere una configuración específica.
Configuración de un proyecto de biblioteca de clases MAUI de .NET para pruebas unitarias
Con este enfoque, el código que desea realizar pruebas unitarias se encuentra en un proyecto de biblioteca de clases de .NET MAUI que es utilizado por su proyecto de aplicación de .NET MAUI. Para escribir pruebas unitarias en la biblioteca de clases MAUI de .NET, será necesario actualizar las plataformas de destino usadas por el proyecto. Esto se puede lograr agregando el valor de la propiedad de compilación $(TargetFramework) del archivo de proyecto de pruebas de xUnit (.csproj) a la propiedad de compilación $(TargetFrameworks) en el archivo de proyecto de la biblioteca de clases MAUI de .NET.
<TargetFrameworks>net9.0;net9.0-android;net9.0-ios;net9.0-maccatalyst</TargetFrameworks>
En este ejemplo, se ha agregado un valor de net9.0 a la $(TargetFrameworks) propiedad de compilación en el archivo de proyecto de la biblioteca de clases de .NET MAUI.
A continuación, debe agregar una referencia al proyecto de biblioteca de clases MAUI de .NET desde el proyecto de prueba de xUnit.
Configuración de un proyecto de aplicación MAUI de .NET para pruebas unitarias
Con este enfoque, el código que desea probar de forma unitaria se encuentra en un proyecto de aplicación .NET MAUI. Para escribir pruebas unitarias en el proyecto de aplicación MAUI de .NET, será necesario actualizar las plataformas de destino usadas por el proyecto. Esto se puede lograr agregando el valor de la $(TargetFramework) propiedad de compilación desde el archivo de proyecto de prueba de xUnit (.csproj) a la $(TargetFrameworks) propiedad de compilación en el archivo de proyecto de aplicación MAUI de .NET:
<TargetFrameworks>net9.0;net9.0-android;net9.0-ios;net9.0-maccatalyst</TargetFrameworks>
En este ejemplo, se ha agregado un valor de net9.0 a la propiedad de compilación $(TargetFrameworks) en el archivo de proyecto de la aplicación .NET MAUI.
También es necesario modificar el proyecto de aplicación MAUI de .NET para que no produzca un archivo ejecutable para el marco de trabajo de destino usado por el proyecto de prueba xUnit. Esto se puede lograr agregando una condición a la $(OutputType) propiedad de compilación en el archivo de proyecto de aplicación MAUI de .NET:
<OutputType Condition="'$(TargetFramework)' != 'net9.0'">Exe</OutputType>
En este ejemplo, el proyecto de aplicación MAUI de .NET solo genera un ejecutable cuando la plataforma de destino no es net9.0.
A continuación, debe agregar una referencia al proyecto de aplicación MAUI de .NET desde el proyecto de prueba de xUnit.
Escritura de pruebas unitarias
xUnit admite dos tipos diferentes de pruebas unitarias:
| Tipo de prueba | Attribute | Description |
|---|---|---|
| Facts | Fact |
Pruebas que siempre son verdaderas, que prueban condiciones invariables. |
| Teorías | Theory |
Pruebas que solo son verdaderas para un conjunto determinado de datos. |
Las pruebas unitarias deben colocarse en el proyecto de prueba xUnit y decoradas con el atributo [Fact] o [Theory]. En el ejemplo siguiente se muestran pruebas unitarias que usan el [Fact] atributo :
namespace MyUnitTests
{
public class MyTests
{
[Fact]
public void PassingTest()
{
Assert.AreEqual(4, 2+2);
}
[Fact]
public void FailingTest()
{
Assert.AreEqual(5, 2+2);
}
}
}
En este ejemplo, las pruebas representan una prueba que pasa deliberadamente y otra que falla.
En el ejemplo siguiente se muestran pruebas unitarias que usan el [Theory] atributo :
namespace MyUnitTests
{
public class MyTests
{
[Theory]
[InlineData(3)]
[InlineData(4)]
[InlineData(5)]
public void MyTheoryTest(int value)
{
Assert.True(value % 2 == 1);
}
}
}
En este ejemplo, aunque solo haya un método de prueba, en realidad hay tres pruebas porque la teoría se ejecutará una vez para cada elemento de datos.
Tip
Pruebe una operación con cada prueba unitaria. A medida que se expande la complejidad de una prueba, hace que la comprobación de esa prueba sea más difícil. Al limitar una prueba unitaria a un único problema, puede asegurarse de que las pruebas son repetibles, aisladas y tienen un tiempo de ejecución más corto. Para obtener más información, consulte Procedimientos recomendados de pruebas unitarias.
Ejecutar pruebas unitarias
Las pruebas unitarias se pueden ejecutar en el Explorador de pruebas en Visual Studio o con el dotnet test comando . Para obtener información sobre el Explorador de pruebas, vea Ejecutar pruebas unitarias con el Explorador de pruebas. Para obtener información sobre el dotnet test comando, consulte Pruebas unitarias de C# en .NET mediante dotnet test y xUnit y dotnet test.
Ejecución de pruebas unitarias mediante ejecutores de dispositivos
Las pruebas unitarias también se pueden ejecutar en un dispositivo con un ejecutor de dispositivos. Un ejecutor de dispositivos es una aplicación de ejecutor de pruebas que proporciona un shell de ejecutor visual y enlaces para ejecutar pruebas desde la CLI con XHarness. Para obtener más información, consulte la wiki de los ejecutores de dispositivos de prueba.
Ejecución de pruebas en una aplicación de plataforma
.NET 11 incluye plantillas de proyectos de prueba de Microsoft.Testing.Platform (MTP) para las plataformas Android y Apple:
| Template | Plataforma | Proceso de prueba |
|---|---|---|
androidtest |
Android | Un proceso de aplicación en un dispositivo o emulador conectado |
iostest |
iOS | Un proceso de aplicación en un dispositivo o simulador conectado |
tvostest |
tvOS | Un proceso de aplicación en un dispositivo o simulador conectado |
macostest |
macOS | Un proceso de aplicación de escritorio |
maccatalysttest |
Mac Catalyst | Un proceso de aplicación de escritorio |
Cada plantilla crea un proyecto de MSTest que se ejecuta en una aplicación de plataforma. Las herramientas de prueba de plataforma notifican los resultados a dotnet test través de MTP. Para obtener más información sobre MTP, consulte Introducción a Microsoft.Testing.Platform (MTP).
Por ejemplo, use los siguientes comandos para crear y ejecutar un proyecto de prueba de Android:
dotnet new androidtest -n MyAndroidTests
dotnet test --project ./MyAndroidTests/MyAndroidTests.csproj
Inicie un emulador de Android o conecte un dispositivo Android antes de ejecutar el comando de prueba. El comando compila e instala la aplicación de prueba y, a continuación, ejecuta las pruebas en el proceso de aplicación con instrumentación de Android.
Los proyectos de prueba de plataforma son diferentes de los proyectos de xUnit descritos anteriormente en este artículo. Un proyecto xUnit convencional está dirigido a un entorno de ejecución .NET host y prueba código que no requiere un proceso de aplicación de la plataforma. Use un proyecto de prueba de plataforma cuando la prueba debe usar las API y el comportamiento de Android, iOS, tvOS, macOS o Mac Catalyst. Para obtener más información sobre el formulario MTP del comando de prueba, consulte dotnet test con Microsoft. Testing.Platform.