Come si può automatizzare un progetto di test Android NUnit?
Nota
Questa guida illustra come automatizzare un progetto di test Android NUnit, non un progetto Xamarin.UITest. Informazioni su Xamarin.UITest sono disponibili qui.
Quando si crea un progetto di app unit test (Android) in Visual Studio (o in un progetto unit test Android in Visual Studio per Mac), questo progetto non eseguirà automaticamente i test per impostazione predefinita. Per eseguire test NUnit in un dispositivo di destinazione, è possibile creare una sottoclasse Android.App.Instrumentation avviata usando il comando seguente:
adb shell am instrument
I passaggi seguenti illustrano questo processo:
Creare un nuovo file denominato 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 ()); } } }
In questo file (
Xamarin.Android.NUnitLite.TestSuiteInstrumentation
da Xamarin.Android.NUnitLite.dll) è sottoclassata per creareTestInstrumentation
.Implementare il
TestInstrumentation
costruttore e ilAddTests
metodo . IlAddTests
metodo controlla quali test vengono effettivamente eseguiti.Modificare il
.csproj
file per aggiungere TestInstrumentation.cs. Ad esempio:<?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>
Distribuire l'applicazione in modalità di debug o rilascio, quindi arrestarla.
Usare il comando seguente per eseguire gli unit test. Sostituire
PACKAGE_NAME
con il nome del pacchetto dell'app (il nome del pacchetto è disponibile nell'attributo dell'app/manifest/@package
che si trova in AndroidManifest.xml):adb shell am instrument -w PACKAGE_NAME/app.tests.TestInstrumentation
Facoltativamente, è possibile modificare il
.csproj
file per aggiungere laRunTests
destinazione MSBuild. In questo modo è possibile richiamare gli unit test con un comando simile al seguente:msbuild /t:RunTests Project.csproj
Si noti che l'uso di questa nuova destinazione non è obbligatorio. Il comando precedente
adb
può essere usato invece dimsbuild
.
Per altre informazioni sull'uso del comando per eseguire unit test, vedere l'argomento Android Developer Running tests with ADB .For more information about using the adb shell am instrument
command to run unit test, see the Android Developer Running tests with ADB topic.
Nota
Con la versione Xamarin.Android 5.0 , i nomi predefiniti dei pacchetti per Android Callable Wrapper si baseranno sul md5SUM del nome completo dell'assembly del tipo esportato. In questo modo è possibile specificare lo stesso nome completo da due assembly diversi e non ottenere un errore di creazione del pacchetto. Assicurarsi quindi di usare la proprietà sull'attributo Name
Instrumentation
per generare un nome DI AW/classe leggibile.
Il nome acw deve essere usato nel adb
comando precedente.
La ridenominazione/refactoring della classe C# richiederà pertanto di modificare il RunTests
comando per usare il nome ACW corretto.