Comment automatiser un projet de test Android NUnit ?
Notes
Ce guide explique comment automatiser un projet de test Android NUnit, et non un projet Xamarin.UITest. Vous trouverez des informations sur Xamarin.UITest ici.
Lorsque vous créez un projet d’application de test unitaire (Android) dans Visual Studio (ou un projet de test unitaire Android dans Visual Studio pour Mac), ce projet n’exécute pas automatiquement vos tests par défaut. Pour exécuter des tests NUnit sur un appareil cible, vous pouvez créer une sous-classe Android.App.Instrumentation démarrée à l’aide de la commande suivante :
adb shell am instrument
Les étapes suivantes expliquent ce processus :
Créez un fichier appelé 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 ()); } } }
Dans ce fichier,
Xamarin.Android.NUnitLite.TestSuiteInstrumentation
(à partir de Xamarin.Android.NUnitLite.dll) est sous-classé pour créerTestInstrumentation
.Implémentez le
TestInstrumentation
constructeur et laAddTests
méthode . LaAddTests
méthode contrôle les tests qui sont réellement exécutés.Modifiez le
.csproj
fichier pour ajouter TestInstrumentation.cs. Par exemple :<?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>
Déployez votre application en mode débogage ou release, puis arrêtez-la.
Utilisez la commande suivante pour exécuter les tests unitaires. Remplacez par
PACKAGE_NAME
le nom du package de l’application (le nom du package se trouve dans l’attribut de/manifest/@package
l’application situé dans AndroidManifest.xml) :adb shell am instrument -w PACKAGE_NAME/app.tests.TestInstrumentation
Si vous le souhaitez, vous pouvez modifier le
.csproj
fichier pour ajouter laRunTests
cible MSBuild. Cela permet d’appeler les tests unitaires avec une commande semblable à la suivante :msbuild /t:RunTests Project.csproj
(Notez que l’utilisation de cette nouvelle cible n’est pas nécessaire ; la commande précédente
adb
peut être utilisée à la place demsbuild
.)
Pour plus d’informations sur l’utilisation de la adb shell am instrument
commande pour exécuter des tests unitaires, consultez la rubrique Android Developer Running tests with ADB .
Notes
Avec la version Xamarin.Android 5.0 , les noms de package par défaut pour les wrappers Android Callable sont basés sur le MD5SUM du nom qualifié d’assembly du type exporté. Cela permet de fournir le même nom complet à partir de deux assemblys différents et de ne pas obtenir d’erreur d’empaquetage. Veillez donc à utiliser la Name
propriété sur l’attribut Instrumentation
pour générer un nom ACW/classe lisible.
Le nom ACW doit être utilisé dans la adb
commande ci-dessus.
Le renommage/refactorisation de la classe C# nécessite donc de modifier la RunTests
commande pour utiliser le nom ACW correct.