Partager via


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 :

  1. 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éer TestInstrumentation.

  2. Implémentez le TestInstrumentation constructeur et la AddTests méthode . La AddTests méthode contrôle les tests qui sont réellement exécutés.

  3. 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="&quot;$(_AndroidPlatformToolsDirectory)adb&quot; $(AdbTarget) $(AdbOptions) shell am instrument -w $(_AndroidPackage)/app.tests.TestInstrumentation" />
        </Target>
        ...
    </Project>
    
  4. Déployez votre application en mode débogage ou release, puis arrêtez-la.

  5. 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
    
  6. Si vous le souhaitez, vous pouvez modifier le .csproj fichier pour ajouter la RunTests 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 de msbuild.)

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.