Condividi tramite


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:

  1. 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 creare TestInstrumentation.

  2. Implementare il TestInstrumentation costruttore e il AddTests metodo . Il AddTests metodo controlla quali test vengono effettivamente eseguiti.

  3. 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="&quot;$(_AndroidPlatformToolsDirectory)adb&quot; $(AdbTarget) $(AdbOptions) shell am instrument -w $(_AndroidPackage)/app.tests.TestInstrumentation" />
        </Target>
        ...
    </Project>
    
  4. Distribuire l'applicazione in modalità di debug o rilascio, quindi arrestarla.

  5. 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
    
  6. Facoltativamente, è possibile modificare il .csproj file per aggiungere la RunTests 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 di msbuild.

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 NameInstrumentation 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.