¿Cómo se automatiza un proyecto de prueba de NUnit de Android?
Nota:
En esta guía se explica cómo automatizar un proyecto de prueba de NUnit de Android, no un proyecto de Xamarin.UITest. Aquí puede encontrar la información sobre Xamarin.UITest.
Al crear un proyecto de Aplicación de prueba unitaria (Android) en Visual Studio (o un proyecto de Android Unit Test [Prueba unitaria de Android] en Visual Studio para Mac), este proyecto no ejecutará automáticamente las pruebas de forma predeterminada. Para ejecutar pruebas de NUnit en un dispositivo de destino, puede crear una subclase Android.App.Instrumentation que se inicie con el siguiente comando:
adb shell am instrument
En los pasos siguientes se explica este proceso:
Cree un nuevo archivo llamado TestInstrumentation.cs:
using System; using System.Reflection; using Android.App; using Android.Content; using Android.Runtime; using Xamarin.Android.NUnitLite; namespace App.Tests { [Instrumentation(Name="app.tests.TestInstrumentation")] public class TestInstrumentation : TestSuiteInstrumentation { public TestInstrumentation (IntPtr handle, JniHandleOwnership transfer) : base (handle, transfer) { } protected override void AddTests () { AddTest (Assembly.GetExecutingAssembly ()); } } }
En este archivo, se crea una subclase de
Xamarin.Android.NUnitLite.TestSuiteInstrumentation
(de Xamarin.Android.NUnitLite.dll) para crearTestInstrumentation
.Implemente el constructor
TestInstrumentation
y el métodoAddTests
. El métodoAddTests
controla qué pruebas se ejecutan realmente.Modifique el archivo
.csproj
para agregar TestInstrumentation.cs. Por ejemplo:<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> ... <ItemGroup> <Compile Include="TestInstrumentation.cs" /> </ItemGroup> <Target Name="RunTests" DependsOnTargets="_ValidateAndroidPackageProperties"> <Exec Command=""$(_AndroidPlatformToolsDirectory)adb" $(AdbTarget) $(AdbOptions) shell am instrument -w $(_AndroidPackage)/app.tests.TestInstrumentation" /> </Target> ... </Project>
Implemente la aplicación en modo de depuración o versión y, a continuación, deténgala.
Use el comando siguiente para ejecutar las pruebas unitarias. Reemplace
PACKAGE_NAME
por el nombre del paquete de la aplicación (el nombre del paquete se puede encontrar en el atributo/manifest/@package
de la aplicación que se encuentra en AndroidManifest.xml):adb shell am instrument -w PACKAGE_NAME/app.tests.TestInstrumentation
Opcionalmente, puede modificar el archivo
.csproj
para agregar el destino de MSBuildRunTests
. Esto hace posible invocar las pruebas unitarias con un comando como el siguiente:msbuild /t:RunTests Project.csproj
(Tenga en cuenta que no es necesario usar este nuevo destino; se puede usar el comando
adb
anterior en lugar demsbuild
).
Para obtener más información sobre el uso del comando adb shell am instrument
para ejecutar pruebas unitarias, consulte el tema Cómo ejecutar pruebas con ADB de Android Developer.
Nota:
Con la versión Xamarin.Android 5.0, los nombres de paquete predeterminados para los contenedores de Android que se pueden llamar se basarán en MD5SUM del nombre de tipo calificado con el ensamblado del tipo que se va a exportar. Esto permite proporcionar el mismo nombre completo a partir de dos ensamblados diferentes y no obtener un error de empaquetado. Por lo tanto, asegúrese de usar la propiedad Name
en el atributo Instrumentation
para generar un nombre de clase o ACW legible.
El nombre de ACW debe usarse en el comando adb
anterior.
El cambio de nombre y la refactorización de la clase C# requerirán, por tanto, la modificación del comando RunTests
para usar el nombre de ACW correcto.